委托事件调用的几种方式
//事件基本调用。事件是种特别的委托
//this.button1.Click+=new EventHandler(btnclick);
//匿名方法
this.button1.Click+=delegate(object sender,EventArgs e){};
//委托
public delegate void eve(object sender,EventArgs e);
//1.0 把委托对向指向方法
//方法1
eve event1 = a;
//方法2,方法传参实例化委托对象
eve event2 = new eve(a);
//2.0 匿名,不需要方法声明,编译自动声明
eve event3 = delegate(object sender, EventArgs e) { };
//3.5 lambda
// (参数) => { 方法体}; 自动作了return
eve event4 = (send, e) => { };
委托链
//方法内容: 实例委托对向,方法加入委托,直接调委托对象
public void calldelegate() {
//普通实例
eve delemodel = a;
//多播 添加事件,成为链。
//PS,如果有反回值,那么反回的是最后一个事件的值。
//1
eve del = a;
del += b;
//
del -= b;
del -= b;
//2 合并委托链,事件不可直接+ 委托可以直接+,所以,可以把事件放入委托中再相加。
eve event1 = a;
eve event2 = b;
eve event3 = event1 + event2;
//执行委托
delemodel(new object(),new EventArgs());
//委托对象,可作为参数传递
}
public bool findmethod(Book obj)
{
return obj.Title == "as";
}
public void listSelect() {
//实例化对象
List<Book> blist = new List<Book>();
//想试试 List<Book>() 加不加()的区别
List<Book> blistautotest = new List<Book>() { new Book("ba"), new Book("bb") };
List<Book> blistautotest2 = new List<Book> { new Book("ba"), new Book("bb") };
//List<Book> blistauto = new List<Book> { new Book { Title = "ba" }, new Book() { Title ="2"} };
//调委托
//这种错误很典型 return book.Title = "ba"
//blistautotest2.Find(delegate(Book book) { return book.Title = "ba"; });
//Find里委托中的 return 是反回子对象BOOK, return 后跟判断条件。
// 如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false。 return后的值必须能得出bool类型
IEnumerable<int> a;
//委托
blistautotest2.Find(findmethod);
//
blistautotest2.Select<Book, Book>(delegate(Book bk1) { return bk1; });
blistautotest2.Select(ba => ba.Title=="aa");
// 匿名委托
blistautotest2.Find (delegate(Book book) { return book.Title == "ba"; });
//labda
blistautotest2.Find(p => p.Title == "");
blistautotest2.Select(p => p.Title = "ba");
}