如何使用多个返回值的方法创建一个类?

时间:2013-09-05 20:24:17

标签: c# class variables reference ref

我创建了一个在实例化时需要更改变量值的类。

实施例: 在我的LrgDialogBox类中,我可能有:

public LrgDialogBox(ref oldResult)
{
    // bunch of code    
    UserInput();
}

public UserInput()
{
    newResult=false;
}

在我的主类中,我创建了一个名为lrgDia的LrgDialogBox对象,然后输入:

lrgDia = new LrgDialogBox(ref result);
if (result==true) this.exit;

我基本上需要知道如何在我的LrgDialogBox类中使引用变量“oldResult”为private,这样任何方法都可以改变它的值,以便它可以在我的主类中使用。希望不改变我的其他方法的参数。请帮忙。

克里斯

2 个答案:

答案 0 :(得分:1)

没有任何方法可以有意义地存储传入的引用参数,并且以后可以修改其值。你需要做的是添加另一层间接;创建一个保留您真正关心的值的引用类型。传递对该类型的引用,然后所有这些引用间接指向单个值。

这种包装器的实现很简单:

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

您现在可以创建一个在构造函数中接受Wrapper<bool>的类,然后在稍后的时间点修改该包装中的值。

public class Foo
{
    private Wrapper<bool> flag;
    public Foo(Wrapper<bool> flag)
    {
        this.flag = flag;
    }

    public void Bar()
    {
        flag.Value = false;
    }
}

您可以使用的另一个选项,因为在这种情况下,您只在构造函数中调用方法,只是让您的其他方法返回其值,而不是设置私有字段。这将是首选设计:

public class LrgDialogBox
{
    public LrgDialogBox(ref bool oldResult)
    {
        // bunch of code    
        oldResult = UserInput();
    }

    public bool UserInput()
    {
        return false;
    }
}

答案 1 :(得分:-1)

在处理过程中只需使用私有变量即可。

    private bool _newResult;

    public LrgDialogBox(ref bool oldResult)
    {
        // bunch of code
        _newResult = oldResult;
        UserInput();
        oldResult = _newResult;
    }

    private void UserInput()
    {
        _newResult = false;
    }