c#System.Type Type如何具有name属性

Jos*_*h R 6 c# inheritance interface abstract

我很确定这与实现接口和继承有关.

在c#中,System.Type类如何具有属性Name?当我从元数据或使用对象浏览器示例Type类的代码时,我看到Type类没有:

string Name
Run Code Online (Sandbox Code Playgroud)

任何地方定义

我还看到Type继承自MemberInfo并实现了_Type和IReflect(就像这样):

public abstract class Type : MemberInfo, _Type, IReflect
Run Code Online (Sandbox Code Playgroud)

基类MemberInfo具有以下属性:

public abstract string Name { get; }
Run Code Online (Sandbox Code Playgroud)

据我所知,这已经在派生类中重写,因为抽象的改性剂.我没有在Type中看到它......

然后在_Type接口中有一个属性:

string Name { get; }
Run Code Online (Sandbox Code Playgroud)

因为它在一个接口中,它也没有自己的实现.

Name的定义在哪里以及它在System.Type类中的值如何?或者我不理解继承和实现接口如何适用于此类

p.s*_*w.g 10

请注意,System.Type它本身就是一个抽象类.这意味着它可以在子类中重写.实际上,System.Type如果你这样做,你可以看到运行时的类型实际上并不是这样的:

typeof(Type).GetType().FullName; // System.RuntimeType
Run Code Online (Sandbox Code Playgroud)

System.RuntimeType是一个您在文档中看不到的内部类型,但它覆盖该Name属性.看起来有点像这样:

namespace System
{
    internal class RuntimeType : Type, ISerializable, ICloneable
    {
        ...
        public override string Name
        {
            get { ... }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅官方文档中的此注释:

Type是一个允许多个实现的抽象基类.系统将始终提供派生类RuntimeType.在反射中,所有以单词Runtime开头的类仅在系统中的每个对象上创建一次并支持比较操作.