1. 程式人生 > >委托基應用及系統定義的委托

委托基應用及系統定義的委托

datetime oid etime rto class add 根據 gets 系統

提問:能不能把方法作為參數傳遞?????

也即使能能不能聲明一個存放方法的變量呢——委托

委托是一種數據類型,像類一樣(可以生命委托類型變量),委托是用來接受方法的,通過委托可以吧方法作為參數進行傳遞

    class Program
    {
        public delegate void AddDelegate(); //定義無返回值無參數的委托

        static void Main(string[] args)
        {
            //【1】第一種方式
            //AddDelegate my = add;
            
// my(); //【2】第二種方式 AddDelegate my = new AddDelegate(add); my.Invoke(); Console.ReadKey(); //你定義的委托沒有參數沒有返回值,方法也是要沒有參數沒有返回值的 //在使用委托的時候 通過委托變量來調用 可以把Invoke方法省略掉。 } public static void add() { Console.WriteLine(
"恭喜你"); } }

需求:假設一件事情在前面和後面要做的事情比較固定,(這裏假設輸出“==========”),但是中間要做的事情經常發生改變,(比如

1.要輸出系統當前時間到控制臺,2.要輸出系統當前是星期幾3.要吧系統時間寫入到文本文件等)。

    class Class1
    {
        public void Print(PrintDelegate a)
        {
            Console.WriteLine("==============");
            Console.WriteLine(
"=============="); //中間的事情經常變化的,需要用委托來傳遞過來一個方法 //判斷委托是否有方法傳遞過來 if (a!=null) { a.Invoke(); } Console.WriteLine("=============="); Console.WriteLine("=============="); }
      在Programe中調用
     static void Main(string[] args) { Class1 my = new Class1(); //實例化這個類 my.Print(printday); //調用print方法,把你需要顯示的內容的方法 傳遞過來 Console.ReadKey(); } //定義一個顯示當前系統時間的方法 public static void printsystem() { Console.WriteLine(DateTime.Now); } //定義一個顯示今天是星期幾的方法 public static void printday() { Console.WriteLine(DateTime.Now.DayOfWeek); }

從上例可以看出委托一般是在一個方法中間“挖個坑” 這個坑用來執行另一個方法,而這個方法是動態的,可以根據需要調用不同的方法到裏面。

  需求:對字符串的處理經常需要發生變化,比如在字符串兩端添加“=”或“+”號把字符串字符全部轉化成大寫。

    public delegate string PrintDelegate(string str);   //定義返回值string 參數string類型的委托

    class Class1
    {
        //定義方法返回值無,參數字符串數組,委托方法
        public void Getstring(string [] strs,PrintDelegate weit)
        {
            //循環遍歷數組
            for (int i = 0; i < strs.Length; i++)
            {
                //數組的每個下標=委托方法返回的值
                strs[i] = weit(strs[i]);
            }
        }

    
    }
 class Program
    {

        static void Main(string[] args)
        {
            //定義字符串數組
            string[] strs =  {"zhangsan","lisi","wangwu" };
            //實例化
            Class1 my = new Class1();
            //調用方法
             my.Getstring(strs, StrToupper);
            //循環輸出結果
            for (int i = 0; i <strs.Length; i++)
            {
                Console.WriteLine(strs[i]);
            }
         

            Console.ReadKey();
        }

        //定義委托方法返回string類型參數string  要和委托一致
        static string set(string a)
        {
            //把string字符串前後都加上“====”
            return "===="+a + "====";

        }
        //定義委托方法把字符串轉換成大寫
        static string StrToupper(string str)
        {
            return str.ToUpper();
        }
    }

委托基應用及系統定義的委托