【问题标题】:How to make a class with multiple methods that return a value?如何创建一个具有多个返回值的方法的类?
【发布时间】:2013-09-09 19:33:44
【问题描述】:

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

示例: 在我的 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”设为私有,以便任何方法都可以更改它的值,以便在我的主类中使用它。希望不改变我的其他方法的参数。请帮忙。

克里斯

【问题讨论】:

    标签: c# class variables reference ref


    【解决方案1】:

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

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

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

    您现在可以在构造函数中创建一个接受Wrapper&lt;bool&gt; 的类,然后在稍后修改该包装器中的值。

    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;
        }
    }
    

    【讨论】:

    • @Steve 如果您要mutating 引用类型引用的对象,则没有必要。如果您需要返回一个新的引用,那么这是必要的。简而言之,如果你想改变变量中的值,这是必要的,不管它是引用类型还是值类型。
    • @Steve 不,不是。如果它是一个引用类型,并且您希望改变引用所引用的对象,那么您根本不需要通过ref 传递它,您可以只传递值。如果您希望更改变量的值,即让变量引用完全不同的对象,则只能通过引用传递引用类型。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2013-04-30
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多