特定のドメイン ロジックをサポートするプロパティとメソッドの共通セットを持つオブジェクトのグループが与えられた場合、これらのオブジェクトに特定の静的メソッドの存在を強制する方法はありますか?
インターフェイスを実装してもこれは達成されず (メソッドはインスタンスのみ)、静的メソッドはオーバーライド、仮想、または抽象としてマークすることはできないと結論付けました。
前もって感謝します。
特定のドメイン ロジックをサポートするプロパティとメソッドの共通セットを持つオブジェクトのグループが与えられた場合、これらのオブジェクトに特定の静的メソッドの存在を強制する方法はありますか?
インターフェイスを実装してもこれは達成されず (メソッドはインスタンスのみ)、静的メソッドはオーバーライド、仮想、または抽象としてマークすることはできないと結論付けました。
前もって感謝します。
いいえ。
(注: F# では、「インライン」関数と「^」型を使用してこのような制約を表現できます (たとえば、T が「int」を返す静的メソッド ToInt(T) を持つ forall 型 T )。コンパイラは、それぞれを効果的に自動展開します。サイトを特定のタイプに呼び出します。)
型に強制的に静的メンバーを持たせる唯一の方法は、それを継承することです。すべての型には静的メンバーがあり、派生型でそれらをオーバーライドする必要がある場合は、「new」キーワードを使用できます。
static void Main(string[] args)
{
Console.WriteLine(Base.Hello());
Console.WriteLine(Derived.Hello());
Console.Read();
/* output will be:
Hello
World
*/
}
public class Base
{
public static object Hello()
{
return "Hello";
}
}
public class Derived : Base
{
public static new object Hello()
{
return "World";
}
}
抽象/オーバーライドとまったく同じではありませんが、消費者の観点からは同様に機能します。