C# メソッドを仮想および静的に宣言できないのはなぜですか? 質問する

C# メソッドを仮想および静的に宣言できないのはなぜですか? 質問する

静的メソッドの集まりであるヘルパー クラスがあり、そのヘルパー クラスをサブクラス化したいと考えています。一部の動作はサブクラスによって異なるため、基本クラスから仮想メソッドを呼び出したいのですが、すべてのメソッドが静的であるため、単純な仮想メソッドを作成できません (仮想メソッドにアクセスするにはオブジェクト参照が必要です)。

これを回避する方法はありますか? シングルトンを使用できると思います。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);
    }

おすすめ記事