15
  1. LINQ、Lambda、Anonymous Methods、Delegatesの意味を誰かが説明できますか?

  2. これら3つは互いにどのように異なりますか?

  3. あるものを別のものと交換できましたか?

グーグルをしたとき、具体的な答えが得られませんでした

4

1 に答える 1

32

LINQは、.NET 3.5の大部分とC#3.0の変更をカバーする幅広いテクノロジ名です。「言語でのクエリ」など。

デリゲートは関数ポインタに相当します。必要に応じて、オブジェクトとしての「メソッドハンドル」、つまり

Func<int,int,int> add = (a,b) => a+b;

デリゲートを作成する方法であり、それを呼び出すことができます。デリゲートは、総合馬術やその他のコールバックアプローチもサポートします。

匿名メソッドは、デリゲートインスタンスを作成するための2.0の省略形です。次に例を示します。

someObj.SomeEvent += delegate {
    DoSomething();
};

また、「キャプチャされた変数」(上記には表示されていません)を介して言語に完全なクロージャを導入しました。C#3.0ではラムダが導入されています。ラムダは匿名メソッドと同じものを生成できます。

someObj.SomeEvent += (s,a) => DoSomething();

ただし、これは、(たとえば)データベースに対する完全なLINQの式ツリーにコンパイルすることもできます。たとえば、SQLServerに対してデリゲートを実行することはできません。しかし:

IQueryable<MyData> source = ...
var filtered = source.Where(row => row.Name == "fred");

式ツリー()にコンパイルされるため、SQLに変換できSystem.Linq.Expressionます。

それで:

  • 匿名メソッドを使用してデリゲートを作成できます
  • ラムダはanonメソッドと同じかもしれませんが、必ずしもそうではありません
于 2010-04-16T10:56:28.870 に答える