委托基應用及系統定義的委托
阿新 • • 發佈:2018-07-30
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(); } }
委托基應用及系統定義的委托