1. ホーム
  2. c#

[解決済み] 拡張メソッドはインターフェースに適用できますか?

2022-04-30 05:16:02

質問

インターフェースに拡張メソッドを適用することは可能ですか? (C#の質問)

それは、例えば次のようなことを実現するためです。

  1. ITopology インターフェイスを作成する

  2. このインターフェイスの拡張メソッドを作成します (例 public static int CountNodes(this ITopology topologyIf) )

  3. を実装したクラス(例:MyGraph)を作成すると、自動的にCount Nodesエクステンションを持つことになる。

こうすることで、インターフェースを実装するクラスは、拡張メソッドで定義されたものと一致するようにクラス名を設定する必要がなくなります。

解決方法は?

もちろん可能です。Linqのほとんどはインターフェース拡張メソッドを中心に構築されています。

インターフェイスはそれ自身の機能を実装できないので、拡張メソッドは実際のコードをインターフェイス定義に関連付ける最も簡単な方法なのです。

をご覧ください。 列挙可能 を中心に構築された拡張メソッドの全コレクションが、このクラスに含まれています。 IEnumerable<T> . 一つを実装するには、クラスに対して一つを実装するのと同じです。

public static class TopologyExtensions
{
    public static void CountNodes(this ITopology topology)
    {
        // ...
    }
}

インターフェースに関する限り、拡張メソッドには特に変わったところはありません。拡張メソッドは、静的なメソッドにコンパイラが構文上の工夫をして、そのメソッドがターゲット型の一部であるかのように見せているだけなのです。