gpt4 book ai didi

c# - 依赖注入(inject)和 C# 语法

转载 作者:行者123 更新时间:2023-11-30 19:14:24 24 4
gpt4 key购买 nike

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

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 - list 3)第一个构造函数调用第二个,当我悬停时智能感知会告诉我在它确实引用的 this(new EntityContactManagerRepository()) 之上第二个构造函数。但是之后我还没有看到带冒号的构造函数它之前。我知道类声明中的冒号告诉ContactController 继承自 Controller 的编译器,但是冒号在构造函数中做什么?

最佳答案

如您所说,它只是调用另一个构造函数作为执行的第一部分。另一种方法是使用 base 来调用基类中的构造函数。语言规范使用术语构造函数初始值设定项 来表示此调用。 总是是这样的——如果你不指定任何东西,它等同于调用 base()。换句话说:

public Foo(int x)

相当于

public Foo(int x) : base()

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

然而,与 Java 不同的是,实例变量初始值设定项在基类构造函数调用之前执行。

查看我的 article about constructor chaining获取更多信息。

关于c# - 依赖注入(inject)和 C# 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/672472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com