Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使一个类具有多个返回值的方法?_C#_Class_Variables_Reference_Ref - Fatal编程技术网

C# 如何使一个类具有多个返回值的方法?

C# 如何使一个类具有多个返回值的方法?,c#,class,variables,reference,ref,C#,Class,Variables,Reference,Ref,我创建了一个类,它需要在实例化变量时更改变量的值 例如: 在我的LrgDialogBox类中,我可能有: public LrgDialogBox(ref oldResult) { // bunch of code UserInput(); } public UserInput() { newResult=false; } 在我的主类中,我创建了一个名为LrgDialogBox的LrgDialogBox对象,然后键入: lrgDia = new LrgDialo

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

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

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

public UserInput()
{
    newResult=false;
}
在我的主类中,我创建了一个名为LrgDialogBox的LrgDialogBox对象,然后键入:

lrgDia = new LrgDialogBox(ref result);
if (result==true) this.exit;
我基本上需要知道如何在我的LrgDialogBox类中使引用变量“oldResult”私有,以便任何方法都可以更改其值,以便在我的主类中使用它。希望不改变其他方法的参数。请帮忙


Kris

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

    private bool _newResult;

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

    private void UserInput()
    {
        _newResult = false;
    }

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

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

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

@Steve如果要对引用类型引用的对象进行变异,则不必这样做。如果您需要返回一个新的引用,那么它是必要的。简而言之,如果您希望更改变量中的值,无论它是引用类型还是值类型,这都是必需的。@Steve不,不是。如果它是引用类型,并且希望对引用引用的对象进行变异,那么根本不需要通过
ref
传递它,只需传递值即可。如果希望更改变量的值,即让变量引用一个完全不同的对象,则只能逐个引用传递引用类型。
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;
    }
}