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

时间:2011-10-27 22:05:32

标签: c# event-handling reference

我通过引用将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;?如果没有,我该如何解决?

(这些例子只是为了解释这个问题。)

4 个答案:

答案 0 :(得分:4)

您通常会将参数传递给您的事件处理程序,该事件处理程序具有可由事件处理程序修改的布尔属性:

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中建立的标准事件处理程序模式:How to: Publish Events that Conform to .NET Framework Guidelines (C# Programming Guide)

答案 1 :(得分:1)

传递包含字段的类,表示它的字符串,并保存它们而不是b1。然后使用反射。

请参阅How to create a reference to a value-field

答案 2 :(得分:0)

b1成为班级的公共字段。

或者是私人的,带有公共吸气剂和公共制定者的财产。

答案 3 :(得分:0)

将代码复制到Console应用程序中时(当然必须更改为静态函数和var b1),当从Main调用时,它可以正常工作:

bool b = true;
method1(ref b);
Console.writeLine(b1);

打印'false'....