请告诉我Class1和Class2或Event和Delegate之间的区别是什么? 我在Form1中测试我的班级,并得到相同的结果活动和代表测试
//Class1.cs using System; using System.Collections.Generic;使用System.Linq的 ; using System.Text;使用系统
class Class1EventArgs
{
public StringBuilder CallStack;
public Class1EventArgs() {
CallStack = new StringBuilder();
}
}
delegate void Class1EventHandler(Object sender, Class1EventArgs e);
class Class1
{
public event Class1EventHandler EventDelegate;
public void EventCaller()
{
Class1EventArgs e = new Class1EventArgs();
e.CallStack.AppendLine("EventCaller");
OnClass1Event(e);
}
protected virtual void OnClass1Event(Class1EventArgs e)
{
if (EventDelegate != null)
{
EventDelegate(this, e);
System.Windows.Forms.MessageBox.Show(e.CallStack.ToString());
}
}
}
//Class2.cs ; using System.Collections.Generic;使用System.Linq的 ; using System.Text;使用系统
public class Class2EventArgs
{
public StringBuilder CallStack = new StringBuilder();
}
public delegate void Class2EventHandler(object sender,Class2EventArgs e);
class Class2
{
public Class2EventHandler EventDelegate;
public Class2()
{
EventDelegate = new Class2EventHandler(this.OnEventHappen);
}
public void EventCaller()
{
Class2EventArgs e = new Class2EventArgs();
e.CallStack.AppendLine("EventCaller");
EventDelegate.Invoke(this, e);
System.Windows.Forms.MessageBox.Show(e.CallStack.ToString());
}
protected virtual void OnEventHappen(object sender, Class2EventArgs e)
{
e.CallStack.AppendLine("OnEventHappen");
}
}
//Form1.cs ; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;使用System.Linq的 ; using System.Text;使用System.Windows.Forms的 ;
public partial class Form1 : Form
{
Class1 c1 = new Class1();
Class2 c2 = new Class2();
public Form1()
{
InitializeComponent();
}
#region "Button1"
private void button1_Click(object sender, EventArgs e)
{
c1.EventCaller();
}
private void c1_EvenDelegate(object sender, Class1EventArgs e)
{
e.CallStack.AppendLine("c1_EvenDelegate");
}
private void c1_EvenDelegate_2(object sender, Class1EventArgs e)
{
e.CallStack.AppendLine("c1_EvenDelegate_2");
}
#endregion
private void Form1_Load(object sender, EventArgs e)
{
//c1 = new Class1();
c1.EventDelegate += new Class1EventHandler(c1_EvenDelegate);
c1.EventDelegate += new Class1EventHandler(c1_EvenDelegate_2);
c2.EventDelegate += new Class2EventHandler(c2_OnEventHappen1);
c2.EventDelegate += new Class2EventHandler(c2_OnEventHappen2);
}
private void button2_Click(object sender, EventArgs e)
{
c2.EventCaller();
}
private void c2_OnEventHappen1(object sender, Class2EventArgs e)
{
e.CallStack.AppendLine("c2_OnEventHappen1");
}
private void c2_OnEventHappen2(object sender, Class2EventArgs e)
{
e.CallStack.AppendLine("c2_OnEventHappen2");
}
}
[代表和事件之间有什么区别?](http://stackoverflow.com/questions/29155/what-is-the-difference-between-a-delegate-and-events) – Gishu 2010-11-17 03:59:20
参考之前评论中的问题。简而言之,一个事件只是一个由声明类型控制的代表。声明类型控制何时触发事件(任何人都可以触发代表)。它也可以控制添加到委托和从委托操作中删除,并在那里有额外的代码。 – Gishu 2010-11-17 04:01:25