ASCII 编码 vs. new ASCIIEncoding()

6
如果我使用:
A)var targetEncodingA = Encoding.ASCII;
B)var targetEncodingB = new ASCIIEncoding(); 那么targetEncoding0和targetEncoding1都是相同类型。
在什么情况下最好使用A或B?除了每次使用时通过构造函数创建新实例之外,是否有任何首选场景和/或优点/缺点?

可能是ASCIIEncoding和Encoding之间的区别的重复问题。 - Ehsan
这只是一个方便的属性。你更喜欢使用Encoding.ASCII,因为它很方便,没有其他特别的原因。 - Hans Passant
@NoOne - 两个问题都涉及到同一个具体的主题,但内容略有不同。不过还是谢谢您的评论。 - rudolf_franek
2个回答

10

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

主要的不同之处在于返回类型不同,这取决于您希望使用哪种类型 (ASCIIEncodingEncoding),而Encoding是基类。
从性能角度来看,Encoding.ASCII是首选。

4

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

个人而言,当一个静态类可以为您完成工作时,我会尽可能避免使用new关键字。另外,Encoding.ASCII比new ASCIIEncoding()更短。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接