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();

    }
}