如何从事件处理程序中更改值参数

本文关键字:值参 参数 程序 事件处理 | 更新日期: 2023-09-27 18:12:41

我通过引用将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);

打印"假"…