C# 使用'调用参数化构造函数;这';实例
在上面的代码中,当调用参数化构造函数时,为什么不能使用'this'关键字作为声明方式 它实际上给了我一个错误,指出“非静态字段、方法或属性需要对象引用”,这可以通过使C# 使用'调用参数化构造函数;这';实例,c#,C#,在上面的代码中,当调用参数化构造函数时,为什么不能使用'this'关键字作为声明方式 它实际上给了我一个错误,指出“非静态字段、方法或属性需要对象引用”,这可以通过使istatic来解决,但是i在使用new调用构造函数时被初始化 请帮助我理解为什么上面的代码是不可能的。您的构造函数是创建类实例的工具,因此在创建类之前您无法访问它的成员是有道理的 从您展示的示例中,您总是将1放入基本构造函数中,因为该变量始终是它的默认值。要达到同样的效果,你只需要打电话 class manning { p
i
static
来解决,但是i
在使用new调用构造函数时被初始化
请帮助我理解为什么上面的代码是不可能的。您的构造函数是创建类实例的工具,因此在创建类之前您无法访问它的成员是有道理的 从您展示的示例中,您总是将1放入基本构造函数中,因为该变量始终是它的默认值。要达到同样的效果,你只需要打电话
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);
}
}
但我怀疑这是你真正想要的,
我认为你把它和使用静态变量混淆了
注意:由于您调用了基本构造函数,因此没有理由复制构造函数中的逻辑
manning() : this(1)
这是不可能的,因为语言标准说不可能。这可以通过给它分配语义来实现,但重点是什么呢?将初始值设定项和构造函数组合在一起已经够令人困惑的了。初始值设定项是通过按词法顺序收集它们并使它们成为构造函数的一部分来实现的。现在试着弄清楚如果它们作为参数传递给另一个构造函数,应该如何解决。“现在试着弄清楚如果它们作为参数传递给另一个构造函数,应该如何解决。”@Jeroenmoster你的意思是什么,你能给我举个例子吗。1。您的类尚未创建,因此您无法访问实例2。没有任何意义,您的实例变量将始终初始化为0,而您只是向其中添加1,因此您将始终将1传递给基。因为成员变量i的实例在构造之后才存在流有点复杂,您可以进一步了解它,静态变量的生存时间与实例成员不同,为了概括它们在程序的生存期内(或在首次尝试访问该类时)都存在@leaner这是否回答了您的问题,请单击空复选框将其标记为已解决
public class manning
{
public static int i = 0;
public manning() : this(i)
{
}
public manning(int i)
{
i++;
Console.WriteLine(i);
}
}