5

如果我使用:

一个)var targetEncodingA = Encoding.ASCII;

二)var targetEncodingB = new ASCIIEncoding();

那么 targetEncoding0 和 targetEncoding1 都是相同的类型。

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

(除了每次我使用它时都由构造函数创建新实例)

4

2 回答 2

9

这是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;
  }
}

主要区别在于返回类型不同,这取决于您希望使用的类型(ASCIIEncodingvs Encoding),并且Encoding是基类。

从性能的角度来看,Encoding.ASCII是偏好。

于 2014-01-02T10:10:56.777 回答
4

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

就个人而言,当静态类可以为您做到这一点时,我会尽可能避免使用 new 关键字。我将补充一点,Encoding.ASCII 比 new ASCIIEncoding() 更短。

于 2014-01-02T10:02:13.543 回答