如何访问传递给构造函数的ref bool变量?

时间:2015-07-08 12:59:17

标签: c# winforms ref

我有一个主要表单,它调用较小的表单。在主要表单中,我有一个名为bool的{​​{1}}设置为_dataReady,但较小表单的目的是检查一些内容并查看数据是否已就绪,在哪种情况下,它会将false设置为_dataReady

这是我的问题:我使用输入参数调用迷你表单,例如(true),但问题是我无法在构造函数块之外访问它。

我尝试制作ref bool _dataReady并将private bool设置为该值,但在更改ref的状态后,private bool未执行更改,与对象不同面向编程工作。

以下是我的一些代码:

//这就是我在主

中调用迷你表格的方式
ref

这是迷你表单和代码的构造函数:

new FrmAccounting(MyTextBox1.Text.Trim().Replace(",", "").ToInt32(),ref _dataReady).ShowDialog();

但是,将表单中的public FrmAccounting(decimal Price,ref bool _dataReady) { InitializeComponent(); dataReady=_dataReady; } private bool dataReady; private bool)设置为dataReady并不会更改true(再次与对象的工作方式不同)......这就是我的想法会发生。

我的问题是:如何更改ref以便我可以直接在主要内容中获得结果?

3 个答案:

答案 0 :(得分:5)

您无法使用ref执行此操作,因为您班级中的字段无法成为ref

我建议将你的变量包装成一个类。您可以传递该类并使用内部值。

public class Wrapper<T>
{
    public T Value {get;set;}
}

然后像这样使用它:

Wrapper<bool> w = new Wrapper<bool>() { Value = _dataReady };

new FrmAccounting(MyTextBox1.Text.Trim().Replace(",", "").ToInt32(),w).ShowDialog();

之后可以使用w.Value检索该值。

答案 1 :(得分:1)

你的第二个表单显示为一个对话框,所以它需要做的就是公开它想要的任何信息作为属性,主表单可以在二级表单关闭后立即检查该属性,允许它做任何事情。适当的时候。

答案 2 :(得分:0)

你真的不需要在这里使用这个'ref'。 在您的某个表单中使用静态全局属性:

public static bool IsReady { get; set; }

然后通过班级名称访问它:

Form1.IsReady = true;

P.S。 或者,如果您只有一个Form1实例,则可以使用委托和传递方法来更改您的私有变量。像这样:

(这是一个控制台应用程序示例,但很容易遵循和使用)

class A
{
    public A(Action<bool> del)
    {
        del(true);
    }
}

class B
{
    private bool field;        

    private void ChangeField(bool value) { field = value; }

    public B()
    {
        Action<bool> Del = ChangeField;

        A instance = new A(Del);
    }        

    public void ShowField()
    {
        Console.WriteLine(field);
    }
}

class Program
{            
    static void Main()
    {
        B i = new B();
        i.ShowField();
        Console.ReadKey();
    }
}

输出:True