需要C#构造函数语法解释

时间:2012-08-20 11:25:35

标签: c# constructor

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

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

2 个答案:

答案 0 :(得分:7)

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

在实例变量初始值设定项执行后执行 构造函数体的

有关详细信息,请参阅my article on constructor chainingMSDN topic on C# constructors

例如,请考虑以下代码:

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

答案 1 :(得分:6)

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