如果我使用:
一个)var targetEncodingA = Encoding.ASCII;
和
二)var targetEncodingB = new ASCIIEncoding();
那么 targetEncoding0 和 targetEncoding1 都是相同的类型。
使用 A 或 B 时是否有任何首选方案和/或优点/缺点?
(除了每次我使用它时都由构造函数创建新实例)
如果我使用:
一个)var targetEncodingA = Encoding.ASCII;
和
二)var targetEncodingB = new ASCIIEncoding();
那么 targetEncoding0 和 targetEncoding1 都是相同的类型。
使用 A 或 B 时是否有任何首选方案和/或优点/缺点?
(除了每次我使用它时都由构造函数创建新实例)
这是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
是偏好。
在所有情况下,我都更喜欢 Encoding.ASCII,它是一个静态属性。它避免了每次需要时都创建一个新实例(单例)。
就个人而言,当静态类可以为您做到这一点时,我会尽可能避免使用 new 关键字。我将补充一点,Encoding.ASCII 比 new ASCIIEncoding() 更短。