- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
 
- 纳金币
- 52352
- 精华
- 343
|
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace CSharp_委托的学习
- {
- class Program
- {
- ////1、什么是委托及最简单的委托定义与实例化
- ////如果我们需要把方法当做参数来传递的话,我们就需要用到委托。委托是一个类型,可以指向一个方法。委托需要定义和实例化。
- ////最简单的委托:
- //private delegate void Print();//定义了一个无返回类型、名称为Print的委托。
- //static void Main(string[] args)
- //{
- // Print print1 = printStr;//用Print类型的委托实例化了一个委托print1,并指向函数printStr。
- // print1();//调用委托即相当于调用函数printStr();
- //}
- //static void printStr()
- //{
- // Console.WriteLine("hello world");
- //}
- ////2、委托可以作为参数传递
- //private delegate void Print();//定义了一个无返回类型、名称为Print的委托。
- //static void Main(string[] args)
- //{
- // Print print1 = printStr;//用Print类型的委托实例化了一个委托print1,并指向函数printStr。
- // printDelegateMethod(print1);//print1作为参数传递,最终调用函数printStr()
- //}
- //static void printStr()
- //{
- // Console.WriteLine("hello world");
- //}
- //static void printDelegateMethod(Print printTemp)
- //{
- // printTemp();
- //}
- ////3、内置委托:Action类型委托
- ////Action类型委托的特点:无返回类型的委托即返回类型为void
- ////定义格式:T表示方法的参数,最多不超过16个
- ////Action
- ////Action<in T>
- ////Action<in T1, in T2>
- ////Action<in T1, in T2....in T16>
- //static void Main(string[] args)
- //{
- // Action a1 = printStr;//用Action类型委托实例化一个委托a1,并指向printStr
- // a1();//调用a1即相当于调用函数printStr
- // Action<string> a2 = printOneStr;//用Action类型委托实例化一个含有一个string类型参数的委托a2,并指向printOneStr
- // a2("hello, I Invoke printOneStr");//调用a2即相当于调用函数printOneStr
- // Action<string, int> a3 = printTwoStr;
- // a3("剩余血量:", 50);
- //}
- //static void printStr()
- //{
- // Console.WriteLine("hello world");
- //}
- //static void printOneStr(string s1)
- //{
- // Console.WriteLine(s1);
- //}
- //static void printTwoStr(string s1, int i2)
- //{
- // Console.WriteLine(s1+i2);
- //}
- ////3、内置委托:Func类型委托
- ////Func类型委托的特点:带有一个返回值的委托
- ////定义格式:T表示方法的参数, TReturn表示返回值类型,T最多不超过16个
- ////Func
- ////Func<out TReturn>
- ////Func<in T1, in T2>
- ////Func<in T1, in T2....in T16, out TReturn>
- //static void Main(string[] args)
- //{
- // Func<int> a1 = Test1;//用Func类型委托实例化一个委托a1,并指向Test1
- // Console.WriteLine(a1());//调用a1即相当于调用函数Test1
- // Func<float, string> a2 = Test2;//用Func类型委托实例化一个含有一个float类型参数,返回类型为string的委托a2,并指向Test2
- // Console.WriteLine(a2(3.14f));//调用a2即相当于调用函数Test2
- // Func<string, int, string> a3 = Test3;
- // Console.WriteLine(a3("剩余血量:", 50));
- //}
- //static int Test1()
- //{
- // return 1;
- //}
- //static string Test2(float f1)
- //{
- // return f1.ToString();
- //}
- //static string Test3(string s1, int i2)
- //{
- // return (s1 + i2);
- //}
- //多播委托:委托里包含多个方法(函数),调用多播委托可以同时调用这些方法
- private delegate void Print();//定义了一个无返回类型、名称为Print的委托。
- static void Main(string[] args)
- {
- Print print = print1;//用Print类型的委托实例化了一个委托print,并指向函数print1。
- print();//调用委托print即相当于调用函数print1();
- print += print2;//并没有直接指向print2,而是加上print2
- print();//调用委托print即相当于调用函数print1()和print2();
- }
- static void print1()
- {
- Console.WriteLine("hello ");
- }
- static void print2()
- {
- Console.WriteLine("world");
- }
- }
- }
复制代码 |
|