我正在阅读WebHostBuilder.cs课程。
我不清楚为什么private readonly IHostingEnvironment _hostingEnvironment;
在构造函数中实例化为_hostingEnvironment = new HostingEnvironment();
这是(为简洁而修改)代码:
public class WebHostBuilder
{
private readonly IHostingEnvironment _hostingEnvironment;
public WebHostBuilder()
{
_hostingEnvironment = new HostingEnvironment();
}
}
更新
我发现这个问题很有用。 Cast interface to its concrete implementation object or vice versa?
答案 0 :(得分:4)
我想你很困惑,在构造函数中设置了值,而不是声明字段的位置。在您的示例中,您可以轻松地并且可能还有效地编写以下内容:
private readonly IHostingEnvironment _hostingEnvironment = new HostingEnvironment();
这将具有完全相同的效果,因为它被编译器隐式转换为构造函数语句。所以两者都很相似。
但是当你不知道在编译时使用的值时,存在需要使用构造函数。想象一下HostingEnvironment
的构造函数需要传递一个整数:
public class WebHostBuilder
{
private readonly IHostingEnvironment _hostingEnvironment // = new HostingEnvironment(whatToSetHere ???);
public WebHostBuilder(int i)
{
_hostingEnvironment = new HostingEnvironment(i);
}
}
在编译期间,您不知道要为HostingEnvironment
- 构造函数提供的值。所以你尽早提供它,在本例中是你自己类的构造函数。
此外,readonly
- 修饰符只是声明您只能在构造函数中设置成员的值(或者使用声明来转换为构造函数 - 打电话,记住我上面提到过的事情。)