您不能在 C# 中执行此操作。相反,它可能会帮助您使用抽象实例方法和单例模式:
abstract public class BaseClass
{
abstract public void RequiredStaticMethod();
}
sealed class Subclass : BaseClass
{
public static readonly Subclass Instance = new Subclass();
public void RequiredStaticMethod() {}
}
您可能想要添加对您要解决的潜在问题的进一步描述。通常,您使用抽象类将消费者与实际实现分离,方法是让它们使用抽象类型。然而,这显然不能用静态成员来完成。正如乔恩评论的那样,我还看不出你打算如何消费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");
}
}