我想知道是否有人可以在这段代码的一行中解释语法:
public class ContactController : Controller { private IContactManagerRepository _repository; **public ContactController() : this(new EntityContactManagerRepository())** {} public ContactController(IContactManagerRepository repository) { _repository = repository; }
我特别感兴趣的是第一个构造函数.我从文章中了解到了(http://www.asp.net/learn/mvc/tutorial-29-cs.aspx - 清单3)第一个构造函数调用第二个,intellisense告诉我何时将鼠标悬停在此(新的EntityContactManagerRepository())上确实是指第二个构造函数.但是我之前没有看过带冒号的构造函数.我知道类声明中的冒号告诉编译器ContactController继承自Controller,但构造函数中的冒号是做什么的?
正如您所说,它只是将另一个构造函数作为执行的第一部分.另一种方法是使用base
它来调用基类中的构造函数.语言规范使用术语构造函数初始化程序进行此调用.有始终是这样的-如果你不指定任何东西,它相当于一个呼叫base()
.换一种说法:
public Foo(int x)
相当于
public Foo(int x) : base()
在这两种情况下,在Foo
执行构造函数的主体之前调用基类的无参数构造函数.编译器确保您不会进入无限循环 - 每个(非静态)类必须至少有一个构造函数调用基类构造函数; 你总是在"this"类的构造函数体执行之前调用基类构造函数.
不像在Java中,然而,实例变量初始化的基类的构造函数调用之前执行.
有关更多信息,请参阅有关构造函数链接的文章.