C# 委托的使用


 

生么是委托????
     委托類似於函數指針,但函數指針只能引用靜態方法,而委托既能引用靜態方法,也能引用實例方法。
     委托使用分三步:1、委托聲明。2、委托實例化。3、委托調用。
請看代碼:

    delegate int NumOpe(int a,int b); //第一步,聲明委托
    class Class1
    {
        static void Main(string[] args)
        {
            Class1 c1 = new Class1();
            NumOpe d1 = new NumOpe(c1.Add);//委托實例化,注意參數是要使用的方法名,且不帶括號
            Console.WriteLine(d1(1, 2));//委托調用
            Console.Read();
        }
        private int Add(int num1, int num2)
        {
            return (num1 + num2);
        }
    } */
    /*例中,委托NumOpe引用了方法Add
 委托聲明了以后,就可以像類一樣進行實例化,委托本身就是處在類級別上的 。實例化時把要引用的方法作為參數,這樣
 委托和方法就關聯了起來,就可以用委托來引用方法了。
 委托和所引用的方法必須保持一致。
 1、參數個數、類型、順序必須完全一致。
 2、返回值必須一致。
 **/
    /*
    下面再看一個委托的示例。
     * */
    public delegate void PrintHandler(string str);//聲明委托類型
    public class PrintStr
    {
        public void CallPrint(string input)
        {
            Console.WriteLine(input);
        }
        public void CallPrint1(string input)
        {
            Console.WriteLine(input);
        }
    }
    class Program
    {
        static void Main1(string[] args)
        {
            PrintStr myPrinter = new PrintStr();
            PrintHandler myHandler = null;
            //將委托鏈接到方法,來實例化委托
            myHandler += new PrintHandler(myPrinter.CallPrint);
            myHandler += new PrintHandler(myPrinter.CallPrint1);
            //不使用“=”是因為這樣會覆蓋掉以前注冊的方法
            if (myHandler != null)
            {
                myHandler("Hello World!");   //調用委托,相當於匿名調用委托所鏈接的方法
            }
            myHandler -= new PrintHandler(myPrinter.CallPrint);
            if (myHandler == null)
            {
                Console.WriteLine("myHandler==null");
            }
            else
            {
                myHandler("最后的一個方法");
                myHandler -= new PrintHandler(myPrinter.CallPrint1);
                Console.WriteLine("把最后的一個也去掉");
                if (myHandler == null)
                {
                    Console.WriteLine("myHandler==null");
                }
                else Console.WriteLine("還有一個");
            }
            Console.Read();
        }
    }//那什么時候該使用委托呢?一個經典回答:若A變動,一系列的B,C,D,E,F將變動,可使用委托。
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM