:C#构造函数中的this(foo)语法?

Fly*_*wat 16 .net c# constructor constructor-chaining

我时不时地碰到我以前见过的语法,但从未使用过.这是其中一次.

有人可以按照C#构造函数方法解释":this"或":base"的用途吗?

例如:

public MyClass(SomeArg arg) : this(new SomethingElse(), arg)
{
}
Run Code Online (Sandbox Code Playgroud)

我的直觉是它用于将默认参数映射到另一个构造函数方法.

MrK*_*urt 19

你基本上是对的. this()在当前实例上调用构造函数,在当前实例上base()调用超类型的构造函数.它们通常用于处理构造函数重载,因此您可以添加其他选项而不会将内容分解为单独的方法.


Jul*_*iet 19

你的直觉是对的.该语法用于在同一个类中调用重载的构造函数:

public class Test
{
    public Test() : this("Called from default constructor") { }
    public Test(String msg)
    {
        Console.WriteLine(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下代码:

public static void Main(String[] args)
{
    Test t1 = new Test();
    Test t2 = new Test("Called from Main function");
}
Run Code Online (Sandbox Code Playgroud)

输出以下内容

Called from default constructor
Called from main function

同样,: base(someParams)用于调用基础构造函数.