静态方法不是实例对象所拥有的,不可能在子类中继承,也没必要在子类继承,它不是同某一具体对象相关的.但你的问题完全可以这样解决:using System;namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
SubClass sub = new SubClass();
sub.method();
}
}
class StaticMethods
{
internal static void Output()
{
Console.WriteLine("This is a output in static method.");
}
}
abstract class TestClass
{
public virtual void method()
{
StaticMethods.Output();
}
}
class SubClass :TestClass
{ }
}
这样,也就等于是在所有抽像类的派生类中都"继承了"静态方法.
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
SubClass sub = new SubClass();
sub.method();
}
}
class StaticMethods
{
internal static void Output()
{
Console.WriteLine("This is a output in static method.");
}
}
abstract class TestClass
{
public virtual void method()
{
StaticMethods.Output();
}
}
class SubClass :TestClass
{ }
}
这样,也就等于是在所有抽像类的派生类中都"继承了"静态方法.
(当然,这只是打个比方),所以每个类都继承自一个公共基类,这个类有一个方法名叫
GetPropertities(),当然,这只跟类型有关,所以,定义成静态方法应当是当然的吧,由于这一组类有很多人在写,所以我想强制别人写的时候也必须重写这个方法,不过由于这个方法是静态的,不能是abstract 或 virtual的,所以在公共基类中定义的时候必须实现它,可这样别人在继承这个类的时候,就有可能忽略这个方法,不进行重写,这个应当是被避免的。
其实有一个公共接口是个解决办法,不过接口不能定义静态方法,并且,实现接口的类好像也不能把接口中的方法实现为静态的,不知道有什么好的方法?
在C#里面用 typeof 的方式取得。你如果想自己实现一个类似的机制,可以看看VC的CRuntimeClass实现