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

前端之家收集整理的这篇文章主要介绍了c#System.Type Type如何具有name属性前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我很确定这与实现接口和继承有关.

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

string Name

任何地方定义

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

public abstract class Type : MemberInfo,_Type,IReflect

基类MemberInfo具有以下属性

public abstract string Name { get; }

据我所知,由于抽象修饰符,必须在派生类中重写它.我没有在Type中看到它……

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

string Name { get; }

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

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

解决方法

请注意,System.Type本身就是一个抽象类.这意味着它可以在子类中重写.实际上,如果您执行以下操作,您可以看到运行时类型实际上不是System.Type:
typeof(Type).GetType().FullName; // System.RuntimeType

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

namespace System
{
    internal class RuntimeType : Type,ISerializable,ICloneable
    {
        ...
        public override string Name
        {
            get { ... }
        }
    }
}

请参阅official documentation中的此注释:

Type is an abstract base class that allows multiple implementations. The system will always provide the derived class RuntimeType. In reflection,all classes beginning with the word Runtime are created only once per object in the system and support comparison operations.

猜你在找的C&C++相关文章