2011-01-12 130 views
0

所有我想要做的是类似于:如何获取类在.NET中输入基类静态方法?

public abstract class BaseClass 
{ 
    public static Type GetType() 
    { 
     return typeof(BaseClass); 
    } 
} 

但是,当我得到它

public class DerivedClass : BaseClass 
{ 
} 

我想

Assert.AreEqual(typeof(DerivedClass), DerivedClass.GetType()); 

如何更改BaseClass的,使这个说法真正?

+0

这不会编译。 – asawyer 2011-01-12 13:17:30

回答

1

静态方法不能继承。

编译器用BaseClass代替DerivedClass,通过其派生类之一调用基类的静态方法。例如,以下是拨打DerivedClass.GetType()的IL代码:

IL_0002: call class [mscorlib]System.Type Tests.Program/BaseClass::GetType() 
2

你不能这样做,因为从它的基地之一,以派生类型你唯一的途径是从一个实例 - 和静态方法没有考虑一个实例。

我希望你的例子是为了简单,因为否则重新实现GetType()似乎有点没有意义 - 因为object.GetType()将做你想要的。

如果你确实需要通过一个静态调用的方法来做到这一点 - 你不能因为任何类型的信息是实际可用静态方法(如我在第一段说的)。

如果你实际上是通过一个实例调用此方法(但我要问为什么!?),那么你可以做以下

a)使你的方法的基础上的实例方法之一。然后,它可以执行this.GetType()(使用.Net基本方法),它将返回实例的最终子类型。

B)定义BaseClass的扩展方法,做一些非常相似:

public static Type GetType2(this BaseClass instance) 
{ 
    return instance.GetType(); 
} 
相关问题