在.NET中,System.Text.Encoding
中有一个名为mscorlib
的类。但是当您执行System.Text.Encoding.ASCII
时,您可以访问ASCII编码类。
起初,我认为这是班级中的一类:
class Encoding {
class ASCII { ... }
...
}
但令人困惑的是,您还可以使用System.Text.ASCIIEncoding
来访问相同的功能。
无法反编译.NET(因为.NET Reflector花钱而且我不太了解IL [所以没有ildasm]),我无法理解这两个类是如何相等的。可能是这样的吗?
class ASCIIEncoding {
internal ASCIIEncoding() { ... }
/* static functions */
}
static class Encoding {
public static readonly ASCIIEncoding ASCII = new ASCIIEncoding();
...
}
这似乎是最可能的方式,但函数原型是
public static Encoding ASCII { get; }
返回从Encoding
派生的类没有意义,因为Encoding是一个具有编码类型(ASCII,UTF-(7/8/16/32)等)的类,所以这意味着ASCIIEncoding
也需要这些变量,不是吗?
任何人都可以帮助解决这种困惑吗?
答案 0 :(得分:3)
返回从Encoding派生的类没有意义,因为Encoding是一个具有编码类型(ASCII,UTF-(7/8/16/32)等)的类,因此这意味着ASCIIEncoding将需要那些变量也没有?
不,因为Encoding.ASCII
等是静态属性,可能由 static 字段支持(尽管这是一个实现细节 - 该属性可能只是创建一个新实例每次,或者它使用的ASCIIEncoding
内可能存在静态内部字段等。
就像这样:
public class BaseClass
{
private readonly static BaseClass firstDerived = new FirstDerived();
private readonly static BaseClass secondDerived = new SecondDerived();
public static BaseClass First
{
get { return firstDerived; }
}
public static BaseClass Second
{
get { return secondDerived; }
}
}
public class FirstDerived : BaseClass {}
public class SecondDerived : BaseClass {}
这是完整的代码 - 尽管在实际上做任何事情的派生类方面都没用。确保您了解其工作原理,然后将其应用于Encoding
...