如果我使用:
A)var targetEncodingA = Encoding.ASCII;
和
B)var targetEncodingB = new ASCIIEncoding();
然后targetEncoding0和targetEncoding1属于同一类型。
使用A或B时是否有任何首选方案和/或优点/缺点?
(除了每次使用时都通过构造函数创建新实例)
答案 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()更短。