class A{
Action a,b;
void Test1(){
int i=new Random().Next(0,100);
this.a=()=>{
Console.WriteLine(2*i);
};
}
void Test2(){
int i=new Random().Next(0,100);
this.a=()=>{
Console.WriteLine(2*i);
};
this.b=()=>{
Console.WriteLine(3*i);
};
}
void App(){
this.Test1();
this.a.Invoke();
}
}
//
在Test1中使用闭包模式,为类级别变量a赋值
然后在App中调用注意次序,当Test1调用完成后Test1内部变量都已经被清理
但是位于Test1内部的闭包定义,导致了一个编译器内部类的生成由这个类
保存了Test1中的变量还有,this.a本身的引用(方法引用),
这些没问题吧,现在如果我将Test1改成Test2那么Test2里定义的闭包模式也会
有一个编译器自动生成的内部类支持吗? 就整个类A而言,Test1,Test2产生的
内部类是同一个吗?
Action a,b;
void Test1(){
int i=new Random().Next(0,100);
this.a=()=>{
Console.WriteLine(2*i);
};
}
void Test2(){
int i=new Random().Next(0,100);
this.a=()=>{
Console.WriteLine(2*i);
};
this.b=()=>{
Console.WriteLine(3*i);
};
}
void App(){
this.Test1();
this.a.Invoke();
}
}
//
在Test1中使用闭包模式,为类级别变量a赋值
然后在App中调用注意次序,当Test1调用完成后Test1内部变量都已经被清理
但是位于Test1内部的闭包定义,导致了一个编译器内部类的生成由这个类
保存了Test1中的变量还有,this.a本身的引用(方法引用),
这些没问题吧,现在如果我将Test1改成Test2那么Test2里定义的闭包模式也会
有一个编译器自动生成的内部类支持吗? 就整个类A而言,Test1,Test2产生的
内部类是同一个吗?
foreach(Control ctl in this.Controls)
{
ctl.MouseDown += (sender1, e1) => {
if (e1.Button == MouseButtons.Left)
{
if (ctl is Button)
{
MessageBox.Show("true");
}
else
{
MessageBox.Show("false");
}
}};
}当然,所有Control中,有很多不是Button。猜猜看,当我点中了Button,会输出什么——“false”。