先看例子
1 public delegate string DelString(string str); 2 3 //方式1 4 ProString(names, delegate(string str) { return str.ToLower(); });//匿名函数 5 6 ProString(names, (str) => { return str.ToUpper(); }); 7 8 foreach (string item in names) 9 { 10 Console.WriteLine(item); 11 } 12 Console.ReadKey(); 13 //下面的才是要委托的对象 14 15 static void ProString(string[] names, DelString del) 16 { 17 for (int i = 0; i < names.Length; i++) 18 { 19 names[i] = del(names[i]); 20 }
2. 泛型委托
public delegate int DelCompare<T>(T o1, T o2); //第一种 // GetMax<int>() //第二种 //List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; ////IEnumerable<int> item = list.Where<int>(n => { return n > 5; }); ////foreach (var i in item) ////{ //// Console.WriteLine(i); ////} 第三种 //list.Where(n => { return n > 5; }); 第三种 //List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; //list.RemoveAll(n => n > 5); //foreach (int item in list) //{ // Console.WriteLine(item); //} //Console.ReadKey(); static T GetMax<T>(T[] nums, DelCompare<T> del) { T max = nums[0]; for (int i = 0; i < nums.Length; i++) { if (del(max, nums[i]) < 0)//需要传进来一个比较的方式 { max = nums[i]; } } return max; }
第三种窗体之间委托
从窗体1===>先展示窗体2==>传值给窗体1
1.先在窗体2中声明委托
public delegate void DelTest(string str);
private DelTest _del;//存储Form1传送过来的函数
2在窗体2中声明一个函数
public Form2(DelTest del)
{
this._del = del;
InitializeComponent();
}
3.清除窗体1中的东西
private void button1_Click(object sender, EventArgs e)
{
this._del(textBox1.Text.Trim());
}
在窗体1中声明一个函数,在窗体1中调用
//将Form2传送过来的数据 赋值给Label
void ShowText(string str)
{
label1.Text = str;
事件(和委托只是增加一个event 和+=)
1.先写委托
2.注册事件,声明事件不需要()
3.调用事件
sender是触发这个事件的对象
e 就是执行这是事件所需要的数据资源
TODO//后续