C# 如何在同一类的方法中设置参数

C# 如何在同一类的方法中设置参数,c#,C#,我将布尔值传递给构造函数。需要在SomeClickMethod()中设置值。相同的值将作为out参数返回,我该怎么办?值类型按值传递。如果希望在类中保留引用,并在另一个方法中修改它,并查看反映到外部的更改,请公开属性或引入容器类,该类将通过引用传递 因此,要么公开一个属性: Main() { bool flag = false; ClassA obj = new ClassA(out flag); if(flag==true) { //

我将布尔值传递给构造函数。需要在
SomeClickMethod()中设置值。
相同的值将作为out参数返回,我该怎么办?

值类型按值传递。如果希望在类中保留引用,并在另一个方法中修改它,并查看反映到外部的更改,请公开属性或引入容器类,该类将通过引用传递

因此,要么公开一个属性:

  Main()
   {
    bool flag = false;
    ClassA obj = new ClassA(out flag);

    if(flag==true)
    {
        //do smething
    }
}

ClassA
{
    ClassA(out bool flag)
    {
       flag = false;      
    }
    private void SomeClickEvent()
    {
         flag = true;
    }
}
你这样称呼它:

public class Foo
{
    public bool SomeValue { get; }

    public Foo(bool someValue)
    {
        SomeValue = someValue;
    }

    public void Foo2()
    {
        SomeValue = true;
    }
}
public class BoolContainer
{
    public bool SomeValue { get; set; }
}

public class Foo
{
    private BoolContainer _boolContainer;

    public Foo(BoolContainer boolContainer)
    {
        _boolContainer = boolContainer;
    }

    public void Foo2()
    {
        _boolContainer.SomeValue = true;
    }
}
或创建一个容器来保存该值:

bool flag = false;
var obj = new Foo(flag);
// ...
flag = obj.SomeValue;
你这样称呼它:

public class Foo
{
    public bool SomeValue { get; }

    public Foo(bool someValue)
    {
        SomeValue = someValue;
    }

    public void Foo2()
    {
        SomeValue = true;
    }
}
public class BoolContainer
{
    public bool SomeValue { get; set; }
}

public class Foo
{
    private BoolContainer _boolContainer;

    public Foo(BoolContainer boolContainer)
    {
        _boolContainer = boolContainer;
    }

    public void Foo2()
    {
        _boolContainer.SomeValue = true;
    }
}

现在,调用者可以访问
boolContainer.SomeValue
来检查(或更改)值。

虽然可以在较新版本的C#中返回引用,但不能存储它们。类中的字段不能是引用。您有几个选项可以解决此问题-将
标志
变量转换为class'字段,或将setter lambda传递给构造函数:

var boolContainer = new BoolContainer();
var obj = new Foo(boolContainer);
// ...
bool flag = boolContainer.SomeValue;
或:

公共类ClassA
{
只读操作设置器;
公共类A(动作设定器)
{
this.setter=setter;
setter(假);
}
私有方法()
{
setter(真);
}
}
布尔标志=假;
ClassA obj=新的ClassA(b=>flag=b);

假设您只是指如何存储和返回值(这是我从您的代码中理解的):

并使用它:

ClassA
{
    bool flag1;
    ClassA(bool flag)
    {
       flag1 = flag;      
    }
    public bool SomeClickEvent()
    {
         return flag1;
    }
}

我不明白你在问什么
SomeClickMethod
是私有的,不会被调用。上面的代码根本没有意义,请重新编写以使其更清晰。如何?我必须在方法中设置参数值。我如何才能取消SomeClickMethod(out bool flag){..}?考虑到OP的Foo2实现是私有的,我更喜欢第二个例子,但我无法解释为什么我更喜欢那个例子。愿意分享你的想法吗?@rene我想这真的取决于“旗帜”的预期用途。@rene谢谢!我没修好那部分。
ClassA a = new ClassA(true);
bool b = a.SomeClickEvent();//returns true.