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开头的类仅在系统中的每个对象上创建一次并支持比较操作.