说明 System.Reflection.MemberInfo.Name 属性

Explain System.Reflection.MemberInfo.Name property

我是 C# 的新手,所以这对我来说有点难以理解。 System.Reflection.MemberInfo.Name 属性 表述如下:

public abstract string Name { get; }

我知道这是一个自动实现的 属性,但是 Name 的值首先是如何设置的?

MemberInfo 是其他 PropertyInfo 的基础 class。派生 class 会覆盖 Name。作为反射框架的用户,您不关心这是一个 abstract 属性。 Name 仅供您使用。

这是否是自动 属性 无关紧要,事实上您无法确定。自动属性是一个 C# 概念,在编译为 IL 时消失。

.NET 反射系统允许用户代码从典型反射 class 派生自己的 classes,例如 PropertyInfo。该框架提供默认实现。这些默认实现(此处:internal class RuntimePropertyInfo)为 abstract 成员提供了实现。

我不知道有人这样做或使用此设施。这似乎是个坏主意。我认为这是 .NET Framework 中的设计错误。

MemberInfo is an abstract class,这意味着它不能自己实例化,只能实例化它的子classes。这允许它的一些成员也是抽象的,Name 属性 是一个。

MemberInfo

Subclass 必须定义一个名为 Name 的 public 属性 和 public get 访问器.如何定义访问器取决于 subclass.

您只需要知道任何继承自 MemberInfo 的 class 都会为您提供可以访问的 Name 属性。

下面是两个 class 的示例,它们继承自抽象 class 和抽象 属性。

abstract class Base {
    public abstract string Name { get; }
}

class Derived1 : Base {
    public override string Name { get { return "Foobar"; } }
}

class Derived2 : Base {
    private string _name;
    public override string Name { get { return _name; } }
    public Derived2(string name) { _name = name; }
}