Domanda

If I use:

A) var targetEncodingA = Encoding.ASCII;

and

B) var targetEncodingB = new ASCIIEncoding();

then both targetEncoding0 and targetEncoding1 are of the same type.

Are there any preferred scenarios and/or advantages/disadvantages when to use A or B?

(besides creating new instance by constructor each time I use it)

È stato utile?

Soluzione

Here is the Encoding.ASCII implement detail (from Encoding.cs):

private static volatile Encoding asciiEncoding;

public static Encoding ASCII
{
  {
    if (Encoding.asciiEncoding == null)
      Encoding.asciiEncoding = (Encoding) new ASCIIEncoding();
    return Encoding.asciiEncoding;
  }
}

The main difference is the return type differs, which depends on what type you wish to use (ASCIIEncoding vs Encoding), and Encoding is the base class.

From a performance perspective, Encoding.ASCII is the preference.

Altri suggerimenti

I prefer Encoding.ASCII in all cases, it is a static property. It avoids creating a new instance each time it is needed (singleton).

Personnaly, I avoid using the new keyword when possible when a static class can do that for you. I will add that Encoding.ASCII is shorter to write than new ASCIIEncoding().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top