Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1012475
  • 博文数量: 177
  • 博客积分: 3629
  • 博客等级: 中校
  • 技术积分: 1839
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-23 21:21
文章分类

全部博文(177)

文章存档

2021年(1)

2020年(5)

2019年(4)

2018年(7)

2017年(1)

2016年(4)

2014年(1)

2013年(8)

2012年(10)

2011年(50)

2009年(12)

2008年(10)

2006年(56)

2005年(8)

分类:

2006-01-02 23:46:31

以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);
这样的.
 
用了委托这种方式在以后对事件(消息)的处理上能更加方便,不过委托这种概念偶也只是局限于本文,好象还有别的大用途哦.欢迎高手指教一二.谢谢.
 
 
阅读(2052) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~