当前位置:  开发笔记 > 编程语言 > 正文

依赖注入和C#语法

如何解决《依赖注入和C#语法》经验,为你挑选了1个好方法。

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

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,但构造函数中的冒号是做什么的?



1> Jon Skeet..:

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

public Foo(int x)

相当于

public Foo(int x) : base()

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

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

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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有