这是我的代码:
class sample
{
public string str1 = "";
public string str2 = "";
public sample()
{
sample smp = new sample("BB", "EE");
}
public sample(string s1, string s2)
{
this.str1 = s1;
this.str2 = s2;
}
public static void Main()
{
sample smpl = new sample();
Console.WriteLine(smpl.str1);
Console.WriteLine(smpl.str2);
Console.ReadLine();
}
}
我将两个字符串值赋予我的变量,但没有发生任何事情。请问您能告诉我哪个问题?
答案 0 :(得分:19)
您想使用this("BB", "EE")
来调用其他构造函数。您在无参数构造函数中所做的是创建一个单独的,分配给本地smp
变量的临时实例,这对str1
或{{1}没有影响正在构造的对象的成员。
str2
答案 1 :(得分:10)
您在无参数构造函数中本地声明了sample
对象。这与您实际构建的对象this
是分开的。当该构造函数返回时,smp
不再在范围内并且将被垃圾收集,同时您还没有初始化字符串(正如您所注意到的那样)。
您有两种选择:
只需将字符串初始化为默认值(请注意,如果您希望在所有构造函数中出现通用逻辑,则另一个选项可能更好)
public sample()
{
this.str1 = "BB";
this.str2 = "EE";
}
public sample(string s1, string s2)
{
this.str1 = s1;
this.str2 = s2;
}
使用构造函数声明中的this
关键字来引用其他构造函数
public sample() : this("BB", "EE")
{
// no need to do anything else, but you can do other things if the situation warrants
}
public sample(string s1, string s2)
{
this.str1 = s1;
this.str2 = s2;
}
答案 2 :(得分:5)
您正在无参数构造中创建sample
的新实例。这会在返回后立即被丢弃,并且不会影响您正在使用的sample
的当前实例。
您可能希望将其更改为:
public sample()
{
this.str1 = "BB";
this.str2 = "EE";
}
可以省略this.
。
正如其他人指出的那样,另一个选择是使用以下方法调用其他构造函数:
public sample()
: this("BB", "EE")
{
}
阅读here。
答案 3 :(得分:-4)
您在构造函数中指定局部变量,请尝试使用
this = new sample("BB", "EE");
编辑,正如所指出的那样
this.str1 = "BB";
this.str2 = "EE";