デリゲートは明確に理解できます
delegate int del(int i);
しかし、なぜ使用できるのですか
del myDelegate = x => x * x;
ここでの質問:
- ラムダ式で x が int 型であることを確認するにはどうすればよいですか?
- ラムダ式がintを返すことをどのように知ることができますか?
C# コンパイラは、コンテキストから のx
左側にあるの型を暗黙的に把握できるほどスマートです。=>
ラムダを type の変数に代入していることを認識しているためdel
、コンパイラはそれx
がint
.
戻り値の型に関する限り、コンパイラはそれx
が であることを認識しているint
ため、式の型x * x
も である必要がありますint
。これが、コンパイラがラムダの戻り値の型を認識する方法です。
myDelegate
同じコードは、正確なタイプが指定されていないとコンパイルされないことに注意してください。
// This does not compile!
var myDelegate = x => x*x;
x を取得するには、型を指定する必要があるからです。このタイプが何であるかを何度も言わせるのではなく、このタイプを検出します。