これは C# では実行できません。代わりに、抽象インスタンス メソッドとシングルトン パターンを使用すると役立つ場合があります。
abstract public class BaseClass
{
abstract public void RequiredStaticMethod();
}
sealed class Subclass : BaseClass
{
public static readonly Subclass Instance = new Subclass();
public void RequiredStaticMethod() {}
}
達成しようとしている根本的な問題の詳細な説明を追加したい場合があります。一般に、抽象クラスを使用して、代わりに抽象型を使用するようにすることで、実際の実装から消費者を分離します。ただし、これは明らかに静的メンバーでは実行できません。ジョンがコメントしたように、あなたがどのように消費するつもりなのか、BaseClass
まだわかりません.
インターフェースを使用して、リフレクションを介してすべての実装タイプを見つけることもできます。これにより、型指定された iterable が生成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");
}
}