GetType()返回从基类调用时派生最多的types吗?

GetType()返回从基类调用时派生最多的types吗?

例:

public abstract class A { private Type GetInfo() { return System.Attribute.GetCustomAttributes(this.GetType()); } } public class B : A { //Fields here have some custom attributes added to them } 

或者我应该只是做一个抽象的方法,派生类将不得不像以下实现?

 public abstract class A { protected abstract Type GetSubType(); private Type GetInfo() { return System.Attribute.GetCustomAttributes(GetSubType()); } } public class B : A { //Fields here have some custom attributes added to them protected Type GetSubType() { return GetType(); } } 

GetType()将返回实际的,实例化的types。 在你的情况下,如果你在B的实例上调用GetType() ,它将返回typeof(B) ,即使这个variables被声明为对A的引用。

您的GetSubType()方法没有任何理由。

GetType总是返回实际实例化的types。 即最派生的types。 这意味着您的GetSubType行为就像GetType本身,因此是不必要的。

要静态获取某种types的types信息,可以使用typeof(MyClass)

你的代码有一个错误,虽然: System.Attribute.GetCustomAttributes返回Attribute[]不是Type

GetType总是返回实际的types。

其原因在于.NET框架和CLR ,因为JIT和CLR使用.GetType方法在内存中创build一个Type对象,该对象包含对象上的信息,并且对象和编译的所有访问都是通过这个types实例。

有关更多信息,请参阅Microsoft Press的“CLR via C#”一书。