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.