以button的Click(单击)为例:
C#基础:
event,delegate用途
event用于将委托类与事件关联
delegate在这里用于将事件与多个方法关联,用到 += .一个事件可以对应多个处理过程
第一步:
namespace System
{
// 摘要:
// 表示将处理不包含事件数据的事件的方法。
[Serializable]
[ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e);
}
第二步
namespace System.Windows.Forms
{
//...
//
// 摘要:
// 在单击控件时发生。在此处将委托与事件关联.不知.NET是如何将它与WM_ 之类的消息联系起来的.
public event EventHandler Click;
//...
}
第三步
//主窗口类
public class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button(); this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(150, 12); this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(82, 23);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
}
private void button1_Click(object sender, EventArgs e)
{
Form1 new_window = new Form1();
new_window.Show();
}
}
就是这三步了,MSDN上有关的说明如下:
一 委托
delegate(C# 参考)
委托类型声明的格式如下:
public delegate void TestDelegate(string message);
delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法。委托类似于 C++ 中的函数指针;但是,委托是类型安全和可靠的。
委托是的基础。
通过将委托与命名方法或匿名方法关联,可以实例化委托。
是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的使用可以像其他任何方法一样,具有参数和返回值.
是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似。与 C 中的函数指针不同,委托是面向对象的、类型安全的和保险的。委托的类型由委托的名称定义。下面的示例声明了一个名为 Del
的委托,该委托可以封装一个采用作为参数并返回 的方法。
public delegate void Del(string message);
构造委托对象时,通常提供委托将包装的方法的名称或使用。实例化委托后,委托将把对它进行的方法调用传递给方法。调用方传递给委托的参数被传递给方法,来自方法的返回值(如果有)由委托返回给调用方。这被称为调用委托。可以将一个实例化的委托视为被包装的方法本身来调用该委托。例如:
// Create a method for a delegate.
public static void DelegateMethod(string message)
{
System.Console.WriteLine(message);
}
// Instantiate the delegate.
Del handler = DelegateMethod;
// Call the delegate.
handler("Hello World");
(来自VS2005 MSDN ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/99a2fc27-a32e-4a34-921c-e65497520eec.htm)
二 event
声明事件
事件和方法一样具有签名,签名包括名称和参数列表。事件的签名通过类型来定义,例如
public delegate void TestEventDelegate(object sender, System.EventArgs e);
NET Framework 中事件的签名中,通常第一个参数为引用事件源的对象,第二个参数为一个传送与事件相关的数据的类。但是,在 C# 语言中并不强制使用这种形式;只要事件签名返回 void,其他方面可以与任何有效的委托签名一样。
向类中添加事件需要使用 event 关键字,并提供委托类型和事件名称。例如:
public class EventSource
{
public event TestEventDelegate TestEvent;
private void RaiseTestEvent() { /* ... */ }
}
(MSDN: ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_csref/html/60698590-8efa-40fe-a5b7-4237cfe16d84.htm)
愚见:
委托签名包括返回类型,参数类型要一样.即委托定义:
public delegate void TestEventDelegate(object sender, System.EventArgs e);
以后用new TestEventDelegate(foo)时,此foo函数也应该是:
void foo(object sender, System.EventArgs e);
这样的.
用了委托这种方式在以后对事件(消息)的处理上能更加方便,不过委托这种概念偶也只是局限于本文,好象还有别的大用途哦.欢迎高手指教一二.谢谢.
阅读(2082) | 评论(0) | 转发(0) |