3

有人可以向我解释以下构造函数语法吗?我以前没有遇到过它并在同事代码中注意到它。

public Service () : this (Service.DoStuff(), DoMoreStuff())
{ }
4

2 回答 2

7

它链接到同一类中的另一个构造函数。基本上,任何构造函数都可以使用链接到同一类中的另一个构造函数: this (...)或者使用 链接到基类中的构造函数: base(...)。如果两者都没有,则相当于: base().

链式构造器在实例变量初始化器执行之后,构造器主体之前执行。

有关更多信息,请参阅我关于构造函数链接的文章关于 C# 构造函数的 MSDN 主题

例如,考虑以下代码:

using System;

public class BaseClass
{
    public BaseClass(string x, int y)
    {
        Console.WriteLine("Base class constructor");
        Console.WriteLine("x={0}, y={1}", x, y);
    }
}

public class DerivedClass : BaseClass
{
    // Chains to the 1-parameter constructor
    public DerivedClass() : this("Foo")
    {
        Console.WriteLine("Derived class parameterless");
    }

    public DerivedClass(string text) : base(text, text.Length)
    {
        Console.WriteLine("Derived class with parameter");
    }

}

static class Test
{
    static void Main()
    {
        new DerivedClass();
    } 
}

Main方法调用中的无参数构造函数DerivedClass。它链接到 中的单参数构造函数DerivedClass,然后链接到 中的双参数构造函数BaseClass。当该基本构造函数完成时,单参数构造函数DerivedClass继续,然后当完成时,原始无参数构造函数继续。所以输出是:

Base class constructor
x=Foo, y=3
Derived class with parameter
Derived class parameterless
于 2012-08-20T11:28:07.350 回答
6

在这种情况下,必须有第二个构造函数,它将接受两个参数—— Service.DoStuff()and的返回值DoMoreStuff()。这两个方法必须是静态方法。

于 2012-08-20T11:27:09.600 回答