2012-04-21 11 views
0

実行中のプログラムがこれ(おそらく何か微妙なことがある)のために異なる動作をするかどうかを知りたいので、コードレビューではなく、ここに投稿します。民間のFuncからの任意の異なるプライベートメソッドの代わりにFunc <T>を使用する必要がありますか?

private int Foo() 
    { 
     return Bar().Bat(); 
    } 

は、プライベートメソッドですか?

private Func<int> Foo =() => Bar().Bat(); 

私がやっているのは、コードをもっとコンパクトにすることだけです。

+0

この複雑さが増しても何のメリットもありません。実際には、3行を節約するためにコードをスローダウンしています。すべてを行うには、メソッド本体を1行に書くだけです。 'private int Foo(){戻り値Bar()。Foo(); } ' – Siege

+0

私はちょうどそれが異なって振舞うかどうかを知りたがっていましたが、私は利益について私の心を構成していませんでした –

答えて

2

ありあまり違いはありませんが、

  • あなたはAのようにその機能を使用することができますテンプレートタイプint(おそらくそれが提供する現在のコードで表示されていない場合でも、タイプセーフ)

  • を定義しますパラメータを別の関数に渡すことができます。これは当然のことながら、ファットケースでも可能ですが、最初はdelegate型を宣言する必要があります。

  • 第三者はよりコンパクトですが、最初はさらにとなります。、imoなので、機能的なものは必要ありません。

+0

それはあなたが第2のスタイルを好むように聞こえる、そうですか? –

+0

@AaronAnodide::)私は自分の投稿を編集しました。それは依存している、私はコンパクトさが好きですが、それは最初のものより少し読みにくいです。 – Tigran

+0

名前付き関数をパラメータとして使用することもできます...パラメータの種類によって異なります。デリゲートを宣言する必要はありません。 – SimpleVar

0

Func sがdelegate Sであり、等しいsignaturのOG Funcを有している任意の方法をカプセル化します。あなたが使用するレイヤー化のためにPrivate Methods

0

実際には、匿名メソッドへの参照を保存しています。コンパイラは、そこから名前付きのメソッドを作成します。何をしているのかは、余分な参照を保存するようなものです。

これはあまりにも大きなものではありませんが、標準の方法に名前を付けることを除いて、それほど違いはありません。また、より論理的で読みやすいです。