从基类调用时,GetType()是否会返回派生类型最多的类型?
示例:
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();
}
}
答案 0 :(得分:122)
GetType()
将返回实际的实例化类型。在您的情况下,如果您在GetType()
的实例上致电B
,则会返回typeof(B)
,即使相关变量被声明为对A
的引用。
您的GetSubType()
方法没有理由。
答案 1 :(得分:22)
GetType
始终返回实际实例化的类型。即最衍生的类型。这意味着您的GetSubType
行为就像GetType
本身一样,因此是不必要的。
要静态获取某些类型的类型信息,您可以使用typeof(MyClass)
。
您的代码有误:System.Attribute.GetCustomAttributes
返回Attribute[]
而不是Type
。
答案 2 :(得分:7)