匿名委托可以访问局部变量,而原始的委托则必须利用别的方法才可以做到
2008-09-23 10:07
288 查看
public class Class1
{
public void AddSendTextEventHandler(SendTextEventHandler st)
{
SendTextEvent += st;
}
public event SendTextEventHandler SendTextEvent;
public void doall()
{
SendTextEvent("1");
//为了让效果看的明显,故方法休眠1秒钟
System.Threading.Thread.Sleep(1000);
do1();
SendTextEvent("2");
System.Threading.Thread.Sleep(1000);
do2();
SendTextEvent("3");
System.Threading.Thread.Sleep(1000);
do3();
SendTextEvent("4");
System.Threading.Thread.Sleep(1000);
do4();
}
void do1()
{ }
void do2()
{ }
void do3()
{ }
void do4()
{ }
}
public delegate void SendTextEventHandler(string text);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
LoadData();
}
void LoadData()
{
Class1 c = new Class1();
//Form2为一个普通窗体类,为局部变量,主要是为了用其Text属性显示SendTextEvent传过来的text
Form2 f = new Form2();
f.Show();
//方法1,通过原始的方法注册委托对象(事件)
c.SendTextEvent += new SendTextEventHandler(c_SendTextEvent);
//方法2,利用匿名委托
c.SendTextEvent += delegate(string text)
{
//注意,f为局部变量,可以在这里操作
f.Text = text;
};
c.doall();
}
//方法2的原始委托注册方式
void c_SendTextEvent(string text)
{
//注意,如果是这种原始方式,Form2的对象f要通过别的方式如建立全局变量来处理器Text属性
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
{
public void AddSendTextEventHandler(SendTextEventHandler st)
{
SendTextEvent += st;
}
public event SendTextEventHandler SendTextEvent;
public void doall()
{
SendTextEvent("1");
//为了让效果看的明显,故方法休眠1秒钟
System.Threading.Thread.Sleep(1000);
do1();
SendTextEvent("2");
System.Threading.Thread.Sleep(1000);
do2();
SendTextEvent("3");
System.Threading.Thread.Sleep(1000);
do3();
SendTextEvent("4");
System.Threading.Thread.Sleep(1000);
do4();
}
void do1()
{ }
void do2()
{ }
void do3()
{ }
void do4()
{ }
}
public delegate void SendTextEventHandler(string text);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
LoadData();
}
void LoadData()
{
Class1 c = new Class1();
//Form2为一个普通窗体类,为局部变量,主要是为了用其Text属性显示SendTextEvent传过来的text
Form2 f = new Form2();
f.Show();
//方法1,通过原始的方法注册委托对象(事件)
c.SendTextEvent += new SendTextEventHandler(c_SendTextEvent);
//方法2,利用匿名委托
c.SendTextEvent += delegate(string text)
{
//注意,f为局部变量,可以在这里操作
f.Text = text;
};
c.doall();
}
//方法2的原始委托注册方式
void c_SendTextEvent(string text)
{
//注意,如果是这种原始方式,Form2的对象f要通过别的方式如建立全局变量来处理器Text属性
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
相关文章推荐
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- Java--局部内部类在访问他所在方法中的局部变量必须用final修饰
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- 局部内部类访问方法的参数和局部变量必须是final的
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量(转)
- Java匿名内部类可以访问外部类的成员;若访问所在方法的成员,那个成员必须具有final属性
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- 为什么匿名内部类访问当前方法的局部变量必须为final类型
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释
- 关于局部内部类访问所在方法的参数或局部变量为什么必须是final的
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- Java中局部内部类可以访问它所在方法中定义的final修饰的局部变量的合理解释
- 匿名内部类访问外部类的实例方法的局部变量时,局部变量必须是final
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
- MySQL数据库可以用任意ip连接访问的方法
- 利用svcutil.exe 访问windows Server 2003的wcf服务生成客户端代码报错:无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法
- Tomcat在局域网中localhost可以访问,但是无法通过本地ip访问,127.0.0.1也无法访问问题的解决方法
- 内网可以访问外网,外网不能访问内网的ACL解决方法