委托基应用实例
?一
提問(wèn):能不能把方法作為參數(shù)傳遞?????
也即使能能不能聲明一個(gè)存放方法的變量呢——委托
委托是一種數(shù)據(jù)類(lèi)型,像類(lèi)一樣(可以生命委托類(lèi)型變量),委托是用來(lái)接受方法的,通過(guò)委托可以吧方法作為參數(shù)進(jìn)行傳遞
class Program{public delegate void AddDelegate(); //定義無(wú)返回值無(wú)參數(shù)的委托static void Main(string[] args){//【1】第一種方式//AddDelegate my = add;// my();//【2】第二種方式AddDelegate my = new AddDelegate(add);my.Invoke();Console.ReadKey();//你定義的委托沒(méi)有參數(shù)沒(méi)有返回值,方法也是要沒(méi)有參數(shù)沒(méi)有返回值的//在使用委托的時(shí)候 通過(guò)委托變量來(lái)調(diào)用 可以把Invoke方法省略掉。 }public static void add(){Console.WriteLine("恭喜你");}}?
?
二?
?需求:假設(shè)一件事情在前面和后面要做的事情比較固定,(這里假設(shè)輸出“==========”),但是中間要做的事情經(jīng)常發(fā)生改變,(比如
1.要輸出系統(tǒng)當(dāng)前時(shí)間到控制臺(tái),2.要輸出系統(tǒng)當(dāng)前是星期幾3.要吧系統(tǒng)時(shí)間寫(xiě)入到文本文件等)。
class Class1{public void Print(PrintDelegate a){Console.WriteLine("==============");Console.WriteLine("==============");//中間的事情經(jīng)常變化的,需要用委托來(lái)傳遞過(guò)來(lái)一個(gè)方法//判斷委托是否有方法傳遞過(guò)來(lái)if (a!=null){a.Invoke();}Console.WriteLine("==============");Console.WriteLine("==============");} 在Programe中調(diào)用static void Main(string[] args){Class1 my = new Class1(); //實(shí)例化這個(gè)類(lèi)my.Print(printday); //調(diào)用print方法,把你需要顯示的內(nèi)容的方法 傳遞過(guò)來(lái) Console.ReadKey();}//定義一個(gè)顯示當(dāng)前系統(tǒng)時(shí)間的方法public static void printsystem(){Console.WriteLine(DateTime.Now);}//定義一個(gè)顯示今天是星期幾的方法public static void printday(){Console.WriteLine(DateTime.Now.DayOfWeek);}
從上例可以看出委托一般是在一個(gè)方法中間“挖個(gè)坑” 這個(gè)坑用來(lái)執(zhí)行另一個(gè)方法,而這個(gè)方法是動(dòng)態(tài)的,可以根據(jù)需要調(diào)用不同的方法到里面。
?
三
需求:對(duì)字符串的處理經(jīng)常需要發(fā)生變化,比如在字符串兩端添加“=”或“+”號(hào)把字符串字符全部轉(zhuǎn)化成大寫(xiě)。
public delegate string PrintDelegate(string str); //定義返回值string 參數(shù)string類(lèi)型的委托class Class1{//定義方法返回值無(wú),參數(shù)字符串?dāng)?shù)組,委托方法public void Getstring(string [] strs,PrintDelegate weit){//循環(huán)遍歷數(shù)組for (int i = 0; i < strs.Length; i++){//數(shù)組的每個(gè)下標(biāo)=委托方法返回的值strs[i] = weit(strs[i]);}}} class Program{static void Main(string[] args){//定義字符串?dāng)?shù)組string[] strs = {"zhangsan","lisi","wangwu" };//實(shí)例化Class1 my = new Class1();//調(diào)用方法 my.Getstring(strs, StrToupper);//循環(huán)輸出結(jié)果for (int i = 0; i <strs.Length; i++){Console.WriteLine(strs[i]);}Console.ReadKey();}//定義委托方法返回string類(lèi)型參數(shù)string 要和委托一致static string set(string a){//把string字符串前后都加上“====”return "===="+a + "====";}//定義委托方法把字符串轉(zhuǎn)換成大寫(xiě)static string StrToupper(string str){return str.ToUpper();}}?
轉(zhuǎn)載于:https://www.cnblogs.com/xiaowie/p/9390174.html
總結(jié)
- 上一篇: CSS样式和class应用
- 下一篇: runtime-归档