delegate的用法 作Java设计的有很多人不知道C#中的delegate,在设计C#程序时,不能很好的运用delegate解决设计上的问题,下面是一个关于Form2能够被复用的示演,希望对了解C#的delegate有用。 namespace WindowsApplication8{ /**//// <summary> /// Form2 的摘要说明。 /// </summary> public class Form2 : System.Windows.Forms.Form { public SendTextDelegate SendText; private System.Windows.Forms.Button button1; private System.Windows.Forms.TextBox textBox1; /**//// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null; public Form2() { // // Windows 窗体设计器支持所必需的 // InitializeComponent(); // // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // } /**//// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if(components != null) { components.Dispose(); } } base.Dispose( disposing ); } Windows 窗体设计器生成的代码#region Windows 窗体设计器生成的代码 /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.textBox1 = new System.Windows.Forms.TextBox(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(112, 144); this.button1.Name = "button1"; this.button1.TabIndex = 0; this.button1.Text = "button1"; this.button1.Click += new System.EventHandler(this.button1_Click); // // textBox1 // this.textBox1.Location = new System.Drawing.Point(104, 40); this.textBox1.Name = "textBox1"; this.textBox1.TabIndex = 1; this.textBox1.Text = "textBox1"; // // Form2 // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(292, 273); this.Controls.Add(this.textBox1); this.Controls.Add(this.button1); this.Name = "Form2"; this.Text = "Form2"; this.ResumeLayout(false); } #endregion private void button1_Click(object sender, System.EventArgs e) { this.SendText(this.textBox1.Text); } } public delegate void SendTextDelegate(string text);}下面是Form1的代码,它把Form2的传过来的text直接显示中它的label1上了。 private void button1_Click(object sender, System.EventArgs e) { Form2 form2 = new Form2(); form2.SendText = new SendTextDelegate(this.formSendText); form2.Show(); } public void formSendText(string text) { this.label1.Text = text; }下面是Form3的代码,它使用的Form2传来的text累计显示在它的textBox1中。 private void button1_Click(object sender, System.EventArgs e) { Form2 form2 = new Form2(); form2.SendText = new SendTextDelegate(this.form3Text); form2.Show(); } public void form3Text(string text) { this.textBox1.Text += text; }