Encoding.ASCII vs. new ASCIIEncoding()
Asked Answered
B

2

6

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)

Burress answered 2/1, 2014 at 9:53 Comment(3)
possible duplicate of Difference Between ASCIIEncoding and EncodingHeritage
It is just a convenience property. You'd prefer using Encoding.ASCII because it is convenient, nothing more.Mixer
@NoOne - both questions target the same specific topic still the content is slightly different. But thanks for the comment.Burress
B
10

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.

Badenpowell answered 2/1, 2014 at 10:10 Comment(0)
L
4

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().

Larisa answered 2/1, 2014 at 10:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.