说明 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; }
}
我是 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; }
}