位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C#使用多播委托應(yīng)該注意的問題

提問人:劉冬梅發(fā)布時(shí)間:2020-10-13

(1)多播委托的委托方法最好是沒有返回值的方法,也就是void方法,如果委托了帶有返回值的方法也無法獲得級聯(lián)的結(jié)果。

using System;

namespace Proj6_10

{    delegate int mydelegate(int x, int y);//聲明委托類型,可直接在命名空間下

      class MyDeClass

      {    public static int add(int x, int y)  {return  x + y; }

            public static int sub(int x, int y)  {return  x - y; }

            static void Main( )

            {

               mydelegate p= MyDeClass.add;  //委托靜態(tài)方法,不需要類的實(shí)例

               p+= MyDeClass.sub;

               int  result=p(4,6);

               Console.WriteLine(“結(jié)果是{0}”,result) ;                 

             }

        }

}


結(jié)果是-2。

(2)多播委托只支持“+”、“-”、“+=”和“-=”四種運(yùn)算。例子:

using System;

namespace Proj6_10

{    delegate void Del(string s);//聲明委托類型,可直接在命名空間下

      class TestClass

      { static void Hello(string s){Console.WriteLine(“Hello,{0}!”,s)};

         static void Goodbye(string s){Console.WriteLine(“Goodbye,{0}!”,s)};

         static void Main( )

            {Del a,b,c,d;

              a=TestClass. Hello; b=TestClass. Goodbye;

               c=a+b;  //建立組合委托c,是a、b兩個(gè)委托組成的委托鏈

               d=c-a;  //從委托鏈中去除a委托

               Console.WriteLine(“調(diào)用委托a:”); a(“A”);

               Console.WriteLine(“調(diào)用委托b:”); b(“B”);

               Console.WriteLine(“調(diào)用委托c:”); c(“C”);

               Console.WriteLine(“調(diào)用委托d:”); d(“D”); 

              }

        }

}

結(jié)果是:

調(diào)用委托a:

Hello,A!

調(diào)用委托b:

Goodbye,B!

調(diào)用委托c:

Hello,C!

Goodbye,C!

調(diào)用委托d:

Goodbye,D!

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部