delegate的好处或必用处
最简单的,如果没有委托,如何实现一个自定义控件,并且提供一些事件给调用者使用?
委托的一个有趣且有用的属性是,它不知道或不关心自己引用的对象的类。任何对象都可以;只是方法的参数类型和返回类型必须与委托的参数类型和返回类型相匹配。这使得委托完全适合“匿名”调用。委托可以同时委托多个方法,即委托链,又很方便的增加或删除某些方法。
它不知道或不关心自己引用的对象的类。任何对象都可以................这没意义呀。要调用另一个类里的方法,必须是已经实例化或者是静态方法才行呀?
List<Person> list = new List<Person>() { new Person() { Name = "张三", Age = 19, EMail = "zhangsan#163-com" }, new Person() { Name = "李四", Age = 27, EMail = "lisi#163-com" }, new Person() { Name = "钱六", Age = 30, EMail = "qianliu#yahoo-com" } }; Person lisi = API.FindFirst(list, delegate (Person p) { return p.Name == "李四"; }); //下面一行是Linq的做法,多么简单。 //Person lisi = list.Where(x => x.Name == "李四").First(); Person useyahoo = API.FindFirst(list, delegate (Person p) { return p.EMail.Contains("yahoo-com"); }); Person whois30age = API.FindFirst(list, delegate (Person p) { return p.Age == 30; });
服务端:
C# code?1234567891011121314151617 class Person { public string Name { get; set; } public int Age { get; set; } public string EMail { get; set; } } class API { public static Person FindFirst(List<Person> list, Action condition) { foreach (Person p in list) { if (condition(p)) return p; } return null; } }
如果不用委托,请你设计一个方法,可以查找列表里面指定的数据,你看怎么设计更简单,怎么不用委托而直接调用。