1

私は csharp 4 の大ファンです.拡張メソッドとして、文字列オブジェクト (.net タイプ)にあまりにも多くのメソッドを追加しました。

これらの多くのメソッドを.nets ライブラリに追加するのは正しいですか? 実際に拡張メソッドが内部でどのように機能するか..?

4

2 に答える 2

4

とにかく、実行時のパフォーマンスには影響しません。「拡張メソッド」はコンパイラのトリックにすぎないためです。内部的には、静的クラスの静的メソッドにすぎません。

public static class MyExt
{
    public static void MyExtension(this object obj)
    {
        //Do something
    }
}    
public static void Main()
{
    object obj = new object();
    obj.MyExtension();
    //Above line gets compiled into MyExt.MyExtension(obj);
}

ご覧のとおり、obj.MyExtension();コンパイルされMyExt.MyExtension(obj);、メソッド呼び出しのみです。パフォーマンスについて心配する必要はありません

パフォーマンスについて少しでも心配している場合は、コンパイル時のパフォーマンスに影響する場合としない場合がありますが、「実行時のパフォーマンス」には影響しないと思います。コンパイラは、現在の名前空間とインポートされた名前空間で定義されている拡張メソッドがあるかどうかを確認する必要があります。 .

staticただし、コンパイラはクラスのみをチェックする必要があるため、これは難しくありません。多数の「静的クラス」を持つライブラリはありません。

于 2013-11-11T15:17:14.993 に答える