静的メソッドの集まりであるヘルパー クラスがあり、そのヘルパー クラスをサブクラス化したいと考えています。一部の動作はサブクラスによって異なるため、基本クラスから仮想メソッドを呼び出したいのですが、すべてのメソッドが静的であるため、単純な仮想メソッドを作成できません (仮想メソッドにアクセスするにはオブジェクト参照が必要です)。
これを回避する方法はありますか? シングルトンを使用できると思います。HelperClass.Instance.HelperMethod() は HelperClass.HelperMethod() よりそれほど悪くはありません。仮想静的メソッドをサポートする言語をいくつか指摘できる人には、ボーナス ポイントを差し上げます。
編集:はい、そうです、私は頭がおかしいのです。Google の検索結果を見て、私はしばらくそこにいないと思いました。
ベストアンサー1
あなたがおかしいとは思いません。.NET では現在不可能なことを使用したいだけなのです。
ジェネリックについて話しているのであれば、仮想静的メソッドの要求は大いに意味があるでしょう。たとえば、私が CLR 設計者に今後要求するのは、次のようなインターフェイスを記述できるようにすることです。
public interface ISumable<T>
{
static T Add(T left, T right);
}
次のように使用します。
public T Aggregate<T>(T left, T right) where T : ISumable<T>
{
return T.Add(left, right);
}
しかし、今はそれは不可能なので、次のようにしています。
public static class Static<T> where T : new()
{
public static T Value = new T();
}
public interface ISumable<T>
{
T Add(T left, T right);
}
public T Aggregate<T>(T left, T right) where T : ISumable<T>, new()
{
return Static<T>.Value.Add(left, right);
}