Encoding.ASCII与新的ASCIIEncoding()

时间:2014-01-02 09:53:41

标签: c# encoding asciiencoding

如果我使用:

A)var targetEncodingA = Encoding.ASCII;

B)var targetEncodingB = new ASCIIEncoding();

然后targetEncoding0和targetEncoding1属于同一类型。

使用A或B时是否有任何首选方案和/或优点/缺点?

(除了每次使用时都通过构造函数创建新实例)

2 个答案:

答案 0 :(得分:8)

以下是Encoding.ASCII实现细节(来自Encoding.cs):

private static volatile Encoding asciiEncoding;

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

主要区别在于返回类型不同,具体取决于您希望使用的类型(ASCIIEncoding vs Encoding),Encoding是基类。

从性能角度来看,Encoding.ASCII是首选项。

答案 1 :(得分:4)

我更喜欢Encoding.ASCII,它是一个静态属性。它避免了每次需要时创建一个新实例(单例)。

Personnaly,当静态类可以为您执行此操作时,我尽可能避免使用new关键字。我将补充说,Encoding.ASCII比新的ASCIIEncoding()更短。