委托事件调用的几种方式

//事件基本调用。事件是种特别的委托
//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");

}

 

posted @ 2013-07-20 14:28  cclient  阅读(436)  评论(0编辑  收藏  举报