首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ASCIIEncoding.GetBytes()不是静态方法?

为什么ASCIIEncoding.GetBytes()不是静态方法?
EN

Stack Overflow用户
提问于 2015-02-14 10:53:28
回答 4查看 424关注 0票数 0

我正在学习C#中的编码,我不明白为什么不将ASCIIEncoding.GetBytes()定义为静态方法,我的意思是为什么需要创建一个ASCIIEncoding实例来使用它!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-02-14 10:58:46

ASCIIEncoding并不是唯一的编码方式。还有UnicodeEncodingUTF8Encoding等。

它们都是从抽象基类派生的,EncodingGetBytes都是在该基类中定义的。这允许您接收任何类型的Encoding (在编译时不知道确切的类型),并且仍然能够调用GetBytes,并在运行时解析正确的逻辑。

不能使用这种动态分派(称为多态)继承、重写和调用static方法。

票数 5
EN

Stack Overflow用户

发布于 2015-02-14 10:58:06

因为这样就无法编写处理任何编码的方法:

代码语言:javascript
复制
public byte[] GetBytes(string input, Encoding encoding)
{
    return encoding.GetBytes(input);
}

这就是它在不同地方的框架中的使用方式。

票数 2
EN

Stack Overflow用户

发布于 2015-02-14 11:00:55

这是因为静态方法不能用于覆盖虚拟方法。

GetBytesEncoding的一个virtual方法,是ASCIIEncoding的基类。为了覆盖基类中的方法,ASCIIEncoding必须将其声明为实例方法。

如果您经常使用ASCIIEncoding,请在类中设置一个静态只读变量,以避免创建该类的新实例:

代码语言:javascript
复制
private static readonly Encoding ASCII = new ASCIIEncoding();
...
var res = ASCII.GetBytes(...);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28514857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档