从C#中的参数化构造函数调用无参数构造函数?
我知道我们可以使用构造函数链从其他构造函数调用参数构造函数。从C#中的参数化构造函数调用无参数构造函数?
但是,
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, world!");
var t1 = new T1("t2");
}
}
public class T1
{
public T1()
{
Console.WriteLine("t1");
}
public T1(string s):base()
{
Console.WriteLine(s);
}
}
这似乎并没有调用基类的构造(不带任何参数)。
任何想法?
编辑:
当前:打印t2。 t1不在控制台上。
所以,我已经使出了以下方法:
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello, world!");
var t1 = new T1("t2");
}
}
public class T1
{
private void privateMethod()
{
Console.WriteLine("common method");
}
public T1()
{
privateMethod();
}
public T1(string s):base()
{
Console.WriteLine(s);
privateMethod();
}
}
是否有这样做的更好的方法呢?
您正在寻找this()
:
public class T1
{
public T1()
{
Console.WriteLine("t1");
}
public T1(string s) : this()
{
Console.WriteLine(s);
}
}
你说得对..我很傻..谢谢:) –
您正在寻找的关键字this
,base
会调用父类(如你扩展类)。
当您使用base
关键字时,实际上您正在调用Object()
构造函数。你想使用this
关键字
public class T1
{
public T1()
{
Console.WriteLine("t1");
}
public T1(string s) : this()
{
Console.WriteLine(s);
}
}
很好的解释,对于第1行,当你使用** base **关键字时,你正在调用Object()构造函数 –
正如在其他的答案中提到,调用你必须使用:this()
(base()
调用基类的无参数的构造函数)
但是参数的构造函数,我觉得这是一种不好的做法。构造函数和参数是更好地定义类的初始化的参数,因此,无参数的构造函数应该调用它,而不是相反。
即:
public class T1
{
public T1():this(String.Empty) // <= calling constructor with parameter
{
Console.WriteLine("t1");
}
public T1(string s)
{
Console.WriteLine(s);
}
}
而不是:
public class T1
{
public T1()
{
Console.WriteLine("t1");
}
public T1(string s) : this() // <= calling parameterless constructor
{
Console.WriteLine(s);
}
}
顺便说一句,似乎语言向使用主构造使用,以及鼓励去 - Primary constructors(它是一个实验性功能在C#6中删除了,不确定是否为好......)
this
调用当前类实例,而base
父母。
这里的基类在哪里? –
@MrinalKamboj - 他们打算使用'this'并且错误地将'base'指向T1构造函数。在这种情况下,'base'实际上是System.Object' – keyboardP
OP,快速调试提示 - 在Visual Studio中,单击'base()'并按F12。你会看到它指的是什么。现在将它换成'this()',然后按F12,你会发现它现在引用了'T1'构造函数。如果您没有获得您期望的编程流程,请逐行逐行进行,这有助于找出问题的根源。 – keyboardP