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调用构造函数时初始化的。
请帮助我理解为什么以上代码无法实现。
答案 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);
}
}