C# 链接构造函数未按预期更新变量
我创建了一个类似于下面的类。正如您所见,我创建了一些构造函数,我正试图使用C# 链接构造函数未按预期更新变量,c#,.net,C#,.net,我创建了一个类似于下面的类。正如您所见,我创建了一些构造函数,我正试图使用:this() 我正在尝试使用 RTTutils rttcalculator = new RTTutils(true); 或者任何其他的verbose和canWrite组合,它们仍然是false。作为本例中的一个示例,我们将在控制台中看不到任何打印内容,即使我在初始化类时指示了true 在这种情况下,我做错了什么?您期望(错误地)在方法RTTCalc中使用的布尔类字段在构造函数中使用参数设置值。但是,无参数构造函数在这些
:this()
我正在尝试使用
RTTutils rttcalculator = new RTTutils(true);
或者任何其他的
verbose
和canWrite
组合,它们仍然是false
。作为本例中的一个示例,我们将在控制台中看不到任何打印内容,即使我在初始化类时指示了true
在这种情况下,我做错了什么?您期望(错误地)在方法RTTCalc
中使用的布尔类字段在构造函数中使用参数设置值。但是,无参数构造函数在这些赋值之前执行
不要在无参数构造函数中调用RTTCalc
。改为提供静态工厂方法:
class RTTutils
{
private bool verbose = false;
private bool canWrite = false;
private RTTutils()
{
sampleList.Add(100); // First sample should be 100
optionChosen.Add("E");
x = 5;
y = 5;
System.IO.File.Delete(this.path);
}
private RTTutils(bool verbose) : this()
{
this.verbose = verbose;
}
private void RTTCalc()
{
if (this.verbose)
Console.WriteLine("Test");
}
public static RTTutils Create(bool verbose)
{
RTTutils result = new RTTutils(verbose);
result.RTTCalc();
return result;
}
}
考虑到上面的代码,我重写了它,它初始化了verbose并可以按预期编写 福班 {
这对你有用吗?如果没有,那么你正在做代码中没有显示的其他事情,这会影响详细性和可写性。你需要提供一个能够真实再现你的问题的示例。因为它不够完整,无法演示你的问题。“但是它们仍然是
false
”,何时、何地以及如何获取此信息?相关:您希望(错误地)在方法RTTCalc
中使用的布尔类字段在具有参数的构造函数中设置值。但是,无参数构造函数在这些赋值之前执行。@Igor构造函数public RTTutils(bool verbose):this()
必须先执行,因为这就是我要调用的。
class RTTutils
{
private bool verbose = false;
private bool canWrite = false;
private RTTutils()
{
sampleList.Add(100); // First sample should be 100
optionChosen.Add("E");
x = 5;
y = 5;
System.IO.File.Delete(this.path);
}
private RTTutils(bool verbose) : this()
{
this.verbose = verbose;
}
private void RTTCalc()
{
if (this.verbose)
Console.WriteLine("Test");
}
public static RTTutils Create(bool verbose)
{
RTTutils result = new RTTutils(verbose);
result.RTTCalc();
return result;
}
}
private bool _verbose = false;
private bool _canWrite = false;
private int _samples;
private int x;
private int y;
public Foo(int samples, bool verbose, bool canWrite)
{
_verbose = verbose;
_canWrite = canWrite;
_samples = samples;
x = 5;
y = 5;
RTTCalc();
}
public Foo() : this(0, false, false) { }
public Foo(int samples) : this(samples, false, false) { }
public Foo(int samples, bool verbose) : this(samples, verbose, false) { }
private void RTTCalc()
{
Console.WriteLine($"V={_verbose}, S={_canWrite}");
Console.ReadKey();
}
}
class Program
{
static void Main(string[] args)
{
Foo test1 = new Foo(1, true, false);
Foo test2 = new Foo(1, true);
Foo test3 = new Foo();
}
}