C#反射和静态成员的继承

时间:2009-07-15 00:54:36

标签: c# reflection inheritance

假设我们有这两个类:

public class Base
{
    public static int GetInt() { return 1; }
}

public class Derived : Base
{

}

我们还要说一段代码调用Derived.GetInt()。我怎样才能从GetInt()中告诉它是Derived.GetInt()而不是被调用的Base.GetInt()?我使用什么反射技术?

5 个答案:

答案 0 :(得分:0)

没有办法用反射或其他方式区分。这些调用完全相同,在编译时,已经处于MSIL级别,没有区别。

答案 1 :(得分:0)

我不认为你这样做,因为 没有Derived.GetInt。 GetInt是一个静态成员,虽然你通过Derived引用它,但它只属于Base。

答案 2 :(得分:0)

由于方法GetInt是静态方法,而不是实例方法,因此将始终从基类调用它。您无法从派生类中真正调用它,因为您没有从实例中调用它。

答案 3 :(得分:0)

如果您希望根据调用该方法的类具有不同的功能,则可以执行此操作。

void Main()
{
   Console.WriteLine( Base.GetInt() ); // 1
   Console.WriteLine( Derived.GetInt() );  // 2
}

public class Base
{
 public static int GetInt() 
 { 
   return 1; 
 }
}

public class Derived : Base
{
  public static int GetInt()
  {
    return 2;
  }
}

答案 4 :(得分:0)

最好将静态方法简单地视为全局函数。类名称用作扩展名称空间。