2017-09-16 6 views
1

デリゲートは静的メソッドでのみ呼び出すことができます。私は、コードの下に走ったとメソッド名が期待通りのラインは、インスタンスメソッドで呼び出されるデリゲートはできますか?

NuOp nuopAdd =新しいNuOp(x.Addition(324324、4324324))でエラーが発生しました。

NuOp nuopMultiply = new NuOp(x.Multiplication(4324,24234));

namespace DelegateEtAl 
{ 
    public delegate double NuOp(double a, double b); 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Mop x = new Mop(); 
      NuOp nuopAdd = new NuOp (x.Addition(324324, 4324324)); 
      NuOp nuopMultiply = new NuOp(x.Multiplication(4324, 24234)); 

      Console.Out.WriteLine(nuopAdd); 
      Console.Out.WriteLine(nuopMultiply); 
     } 
    } 

    public class Mop 
    { 
     public double Addition(double opA, double opB) 
     { 
      return opA + opB; 
     } 

     public double Multiplication(double opA, double opB) 
     { 
      return opA + opB; 
     } 
    } 
} 

私は静的メソッドのみを扱った見つかったすべての例をGoogleで検索する場合。しかし、静的メソッドの場合

https://msdn.microsoft.com/en-us/library/aa288459(v=vs.71).aspx

リンク状態の下に、デリゲートオブジェクトは、 と呼ばれるメソッドをカプセル化します。たとえば、メソッドの場合、デリゲートオブジェクトは インスタンスとそのインスタンスのメソッドの両方をカプセル化します。

ありがとうございます。

+1

あなたの問題は、デリゲートをインスタンス化して**同時にパラメータを渡そうとしていることです – MickyD

答えて

1

デリゲートを静的メソッドまたは非静的メソッドのどちらでも呼び出すことができます。このような制限はありません。しかし、あなたは以下のようにそれをしなければならない。

NuOp nuopAdd = x.Addition; 
NuOp nuopMultiply = x.Multiplication; 

Console.Out.WriteLine(nuopAdd(324324, 4324324)); 
Console.Out.WriteLine(nuopMultiply(4324, 24234)); 

あなたのデリゲートを使用方法に問題はあなたがそれらを正しく初期化されなかったという事実です。デリゲートは 特定のパラメータリストを持つメソッドへの参照を表し、型を返すタイプある

:あなたはデリゲートhereの定義を読めば、これは明らかです。 デリゲートをインスタンス化すると、 互換シグネチャと戻り値の型を持つ任意のメソッドにそのインスタンスを関連付けることができます。デリゲートインスタンスを使用して メソッドを呼び出す(または呼び出す)ことができます。

デリゲートの使用方法の詳細については、hereをご覧ください。

デリゲートNuOpは、double型の2つのパラメータをとり、double型を返す任意のメソッドを指すことができます。あなたはNuOpの代理人を誘拐するために、上記のようなNuOpにそのような方法の署名を割り当ててください。

+0

おかげで貴方の答えは私に解決策を与えました – luckyluke

+0

@luckylukeようこそ!私は喜んで私が助けた:) – Christos