使用'this'实例调用参数化的构造函数

时间:2018-07-21 13:32:43

标签: c#

class manning
{
    public  int i = 0;
    public manning() : this(this.i) or this(i) //why is this not possible.
    {
        this.i++;
        Console.WriteLine(i);
    }
    public manning(int i)
    {
        i++;
        Console.WriteLine(i);
    }
}

在上面的代码中,在调用参数化构造函数时,为什么不能将'this'关键字用作声明方式。

它实际上给我一个错误,指出“非静态字段,方法或属性需要对象引用”,可以通过使i static来解决,但是{{1 }}是在使用new调用构造函数时初始化的。

请帮助我理解为什么以上代码无法实现。

1 个答案:

答案 0 :(得分:1)

您的构造函数将创建类的实例,因此在创建类之前您将无权访问其成员,

在您显示的示例中,始终将1放入基本构造函数中,因为该变量将始终是其默认值。要完成等效操作,您只需致电

manning() : this(1)

但是我怀疑那是你真正想要的, 我认为您将其与使用静态变量混淆了

注意::由于您调用了基本构造函数,因此没有理由在构造函数中重复逻辑

public class manning
{
    public static int i = 0;
    public manning() : this(i) 
    {
    }
    public manning(int i)
    {
        i++;
        Console.WriteLine(i);
    }
}