2017-05-16 37 views
1

拡張メソッドの中には、他の拡張メソッドを使用することが時々意味があります。 "this"の構文を使用する必要がある場合は、私の心を固めることはできません。 Foo1拡張メソッドクラス内で拡張メソッドを呼び出すかどうか

public static class StringExtensions 
{ 
    // Foo vs Foo1 
    public static string Foo(this string s) 
    { 
     return s + "Foo" + s.Bar(); // "this" syntax 
    } 

    public static string Foo1(this string s) 
    { 
     return s + "Foo" + Bar(s); 
    } 

    public static string Bar(this string s) 
    { 
     return s + "Bar"; 
    } 
} 

Foo。 2つの質問が発生します:

  1. パフォーマンス。生成されたILコードの面で違いはありますか?
  2. コードデザイン。どの2つのアプローチのどちらが望ましいでしょうか?どうして?
+1

個人的に私は拡張メソッドを優先します。しかし、それらは構文的な砂糖です。 FooとFoo1は全く同じ方法でコンパイルされます。そのため、パフォーマンスに違いはありません。編集:拡張メソッドを使用する利点は、IntelliSenseのサポートです。変数の名前を入力することもできますし、IntelliSenseは拡張メソッドも表示します。このアプローチ(Linqのような)では、フレームワークをもっと早く探索することができます。 – Timo

答えて

3
  1. 拡張メソッドは、通常の静的メソッド呼び出しにコンパイルされているので、何もパフォーマンスの違いは、ありません。

  2. 私はあなたが持っている場合、このメソッドは、拡張メソッド(this string s)として宣言されているためthis構文は、preferrableだと思います - 常には、拡張メソッドとしてそれを呼び出すと、通常の静的呼び出しと混同しないに良いです。

+0

良いコンベンションのようです。 – l33t