[英]C# reflection and inheritance of static members
假设我们有以下两个类:
public class Base
{
public static int GetInt() { return 1; }
}
public class Derived : Base
{
}
我们还假设一段代码调用Derived.GetInt()。 我如何从GetInt()内部得知它是Derived.GetInt()而不是被调用的Base.GetInt()? 我使用什么反射技术?
无论是使用反射还是其他方法,都无法分辨出差异。 这些调用完全等效,并且在编译时已经处于MSIL级别,没有区别。
我不认为你这样做,因为没有 Derived.GetInt。 GetInt是静态成员,尽管您通过Derived引用它,但它仅属于Base。
由于方法GetInt是静态方法,而不是实例方法,因此将始终从基类中调用它。 您不能真正从派生类中调用它,因为您不是从实例中调用它。
如果您希望基于调用该方法的类具有不同的功能,则可以执行此操作。
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;
}
}
最好将静态方法简单地视为全局函数。 类名用作扩展名称空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.