button1.OnClick += new EventHandler( this.buttonClick ); 跟
button1.OnClick += this.buttonClick ;
一样,呵呵。只是一个是明确进行了类型转换,而一个是隐式的。
一个朋友回答我两句有什么不同的看法,我有点疑惑,这是进行了类型转换吗??
望高手指点下!
button1.OnClick += this.buttonClick ;
一样,呵呵。只是一个是明确进行了类型转换,而一个是隐式的。
一个朋友回答我两句有什么不同的看法,我有点疑惑,这是进行了类型转换吗??
望高手指点下!
解决方案 »
- 把字符串转成整型报错以前从来没有碰到过和datatime扯上了
- 关于泛型的一个很严严严严严严严严严重的问题。。。
- Empp的收发集成 Window服务问题?
- 深圳的关口官匪勾结地带!
- MRPII管理技术(柳中冈) 完整版 的下载地址(WORD格式)
- 有哪位写过在DataSet中查找某一字段重复行的代码?
- TrackBar控件中那个滑动块 怎么改颜色?
- 新手问题急用问题,在C#的winform中,例如我有个button1按钮和picturebox1,如何实现当我按回车键时能发生响应,我在线等各位高手帮帮忙
- 请问C#能够编写出可以让Asp直接调用的DLL文件吗?
- 另一个关于dataRelation的问题?
- 急问类无效问题解决?
- 谁有网络版的棋牌游戏源码给我一份,越简单越好.
以编程方式订阅事件
定义一个事件处理程序方法,其签名与该事件的委托签名匹配。例如,如果事件基于 EventHandler 委托类型,则下面的代码表示方法存根: 复制代码
void HandleCustomEvent(object sender, CustomEventArgs a)
{
// Do something useful here.
}
使用加法赋值运算符 (+=) 来为事件附加事件处理程序。在下面的示例中,假设名为 publisher 的对象拥有一个名为 RaiseCustomEvent 的事件。请注意,订户类需要引用发行者类才能订阅其事件。 复制代码
publisher.RaiseCustomEvent += HandleCustomEvent;
请注意,前面的语法是 C# 2.0 中的新语法。此语法完全等效于必须使用 new 关键字显式创建封装委托的 C# 1.0 语法: 复制代码
publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);
还可以通过使用 lambda 表达式添加事件处理程序: 复制代码
public Form1()
{
InitializeComponent();
// Use a lambda expression to define an event handler.
this.Click += (s,e) => { MessageBox.Show(
((MouseEventArgs)e).Location.ToString());};
}
有关更多信息,请参见如何:在 LINQ 外部使用 Lambda 表达式(C# 编程指南)。
使用匿名方法订阅事件
使用加法赋值运算符 (+=) 来为事件附加匿名方法。在下面的示例中,假设名为 publisher 的对象拥有一个名为 RaiseCustomEvent 的事件,并且还定义了一个 CustomEventArgs 类以承载某些类型的专用事件信息。请注意,订户类需要引用 publisher 才能订阅其事件。 复制代码
publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
{
string s = o.ToString() + " " + e.ToString();
Console.WriteLine(s);
};
请务必注意,如果使用匿名方法订阅事件,事件的取消订阅过程将比较麻烦。此时要取消订阅,请返回到该事件的订阅代码,将该匿名方法存储在委托变量中,然后将委托添加到该事件中。
比如:
button1.OnClick += new EventHandler( this.buttonClick ); 跟
button1.OnClick += this.buttonClick ;
对于onClick来说,它实际需要的是一个EventHandler类型的委托,无论使用哪一种版本的编译器这一点都不变化,下面的那种用法只是由编译器进行了这个工作。举个例子来说:
int i = 10;
string s = "abc" + i + "def";
string s2 = "abc" + 10 + "def";
这段代码是可以通过编译(C# 3.0)的,只是被编译器转换为类似于:
string s = "abc"+i.ToString()+"def";
string s2 = "abc"+10.ToString()+"def";
的语句罢了。