你不能在C#中做到這一點。相反,它可以幫助你用一個抽象的實例方法和Singleton模式:
abstract public class BaseClass
{
abstract public void RequiredStaticMethod();
}
sealed class Subclass : BaseClass
{
public static readonly Subclass Instance = new Subclass();
public void RequiredStaticMethod() {}
}
您可能要添加你想達到的根本問題的進一步描述。一般來說,您可以使用抽象類來將消費者從實際實現中解耦出來,方法是使用抽象類型來代替。但是,這顯然不能用靜態成員來完成。正如Jon所評論的那樣,我看不到你打算如何消耗BaseClass
。
你也許也可以使用一個接口,並通過反射找到所有實現類型。這將產生一個IFoo
輸入迭代並調用你的方法在一個實例綁定的方式:
class Program
{
public static void Main()
{
var classes = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.GetInterface("IFoo") != null);
foreach(var foo in classes.Select(c => Activator.CreateInstance(c)).Cast<IFoo>())
{
foo.RequiredNonStaticMethod();
}
}
}
public interface IFoo
{
void RequiredNonStaticMethod();
}
public class FooImpl : IFoo
{
public void RequiredNonStaticMethod()
{
Console.WriteLine("Foo");
}
}
難道你不能使用[接口](http://msdn.microsoft.com/en-us/library/87d83y5b(v = vs.80).aspx)? – MyCodeSucks 2013-03-14 16:13:07
這在C#中不受支持。它已被討論[這裏](http://stackoverflow.com/questions/1380087/whats-the-correct-alternative-to-static-method-inheritance-c)和[這裏](http://stackoverflow.com/questions/774181/why-cant-i-inherit-static-classes) – oleksii 2013-03-14 16:14:26
此問題類似於http://stackoverflow.com/questions/763344/c-sharp-virtual-or-abstract-static-methods/763364 #763364 – 2013-03-14 16:17:34