依赖注入和C#语法

2 c# model-view-controller

我想知道是否有人可以在这段代码的一行中解释语法:

public class ContactController : Controller
{
    private IContactManagerRepository _repository;

    **public ContactController()
        : this(new EntityContactManagerRepository())**
    {}


    public ContactController(IContactManagerRepository repository)
    {
        _repository = repository;
    }
Run Code Online (Sandbox Code Playgroud)

我特别感兴趣的是第一个构造函数.我从文章中了解到了(http://www.asp.net/learn/mvc/tutorial-29-cs.aspx - 清单3)第一个构造函数调用第二个,intellisense告诉我何时将鼠标悬停在此(新的EntityContactManagerRepository())上确实是指第二个构造函数.但是我之前没有看过带冒号的构造函数.我知道类声明中的冒号告诉编译器ContactController继承自Controller,但构造函数中的冒号是做什么的?

Jon*_*eet 5

正如您所说,它只是将另一个构造函数作为执行的第一部分.另一种方法是使用base它来调用基类中的构造函数.语言规范使用术语构造函数初始化程序进行此调用.有始终是这样的-如果你不指定任何东西,它相当于一个呼叫base().换一种说法:

public Foo(int x)
Run Code Online (Sandbox Code Playgroud)

相当于

public Foo(int x) : base()
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,在Foo执行构造函数的主体之前调用基类的无参数构造函数.编译器确保您不会进入无限循环 - 每个(非静态)类必须至少有一个构造函数调用基类构造函数; 你总是在"this"类的构造函数体执行之前调用基类构造函数.

不像在Java中,然而,实例变量初始化基类的构造函数调用之前执行.

有关更多信息,请参阅有关构造函数链接的文章.