デリゲートのインスタンスを作成する点について何か不思議です。私はそれらが関数ポインタであることを理解していますが、デリゲートインスタンスを使用する目的は何ですか?最初に考えたのでデリゲートインスタンスと関数の直接渡しの比較
public delegate bool IsEven(int x);
class Program
{
static void Main(string[] args)
{
int[] nums = new int[] { 1, 3, 4, 5, 6,7, 8, 9 };
// creating an instance of delegate and making it point to 'CheckEven' function
IsEven isEven = new IsEven(CheckEven);
// using delegate for parameter to get sum of evens
int tot1 = Sums(nums, isEven);
// passing in the function directly as parameter and not delegate instance
int tot2 = Sums(nums, CheckEven);
// using lambda expressions
int tot3 = Sums(nums, x=> x%2==0);
ReadKey();
}
public static int Sums(int[] nums, IsEven isEvenOdd)
{
int sum = 0;
foreach(int x in nums)
{
if (isEvenOdd(x))
sum += x;
}
return sum;
}
public static bool CheckEven(int x)
{
if (x % 2 == 0)
return true;
else
return false;
}
}
常にラムダを使用することを選ぶあなたが合格しようとしている機能の機能は複雑な実装を持っていない場合はそうでない理由を私はちょうど直接に私の機能を渡さないだろう、最高のアイデアのように思えますパラメーター?また、Lambdasでは、代理人と同じように新しいメソッド全体を作成することに反対して、オッズの合計を計算するようにLambdaを変更する方がずっと簡単です。
_ "このメソッドをパラメータとして直接使用しているものを止めているもの" _上記のコードをコンパイルしましたか?それは持っているべきであり、そうすることで明らかにその質問に「何もない」と答えるべきでした。それは働いたので、何もあなたを止めませんでした。率直に言って、何を求めているのかははっきりしていません。 –
あなたの質問は主に意見ベースですが、 'new'演算子を使うか単にメソッド名を与えるかのどちらかを知っていれば、同じことが起こります(新しいデリゲートインスタンスが作成されます)。後者は暗黙のうちに、コンパイラが '新しいIsEven(CheckEven)'をあなたのために埋め込むことで、暗黙的にそれを行います。もしあなたがそれを理解していなければ、ここでの質問が広すぎるかもしれないので、利用可能なドキュメントを読むことに努力すべきです(プログラミング言語の仕組みに関する手持ちのチュートリアルの場所ではありません)。 –
私はデリゲートインスタンスを使用するポイントが何であるか尋ねてみたはずです。 – Cosmik11