我通过引用将bool
传递给另一个类中的方法,以便我可以从方法内更改它(原始参数)。
我还希望一个事件(通过该方法订阅)能够改变它。
这样做:
class myCheckBox : CheckBox
{
bool b1;
public myCheckBox(ref bool b)
{
b1 = b;
this.CheckedChanged += new EventHandler(myCheckBox_CheckedChanged);
}
void myCheckBox_CheckedChanged(object sender, EventArgs e)
{
b1 = Checked;
}
}
没有帮助,因为b1只是b的副本。
有办法做:ref b1 = ref b;
吗?如果不是,我怎么解决这个问题?
(示例仅用于解释问题)
您通常会向事件处理程序传递一个参数,该参数具有布尔属性,可以由事件处理程序修改:
public class MyEventArgs : EventArgs
{
public bool Value { get; set; }
}
public class MyClass
{
public void method1(ref bool b)
{
MyEventArgs e = new MyEventArgs()
{
Value = b
};
eventMethod(e);
b = e.Value;
}
void eventMethod(MyEventArgs e)
{
e.Value = false;
}
}
你可能还想看看。net中建立的标准事件处理程序模式:如何:发布符合。net框架指南的事件(c#编程指南)
传递包含字段的类,表示它的字符串,并保存它们而不是b1。然后使用反射。
参见如何创建对值字段的引用
将b1
设置为类的公共字段
或者是私有的,带有公共getter和公共setter的属性
当我将代码复制到控制台应用程序中时(当然必须更改为静态函数和var b1),当从Main:
调用时,它会像你想的那样工作:bool b = true;
method1(ref b);
Console.writeLine(b1);
打印"假"…