0

声明中 Method1 和 Method2 有什么区别?

方法1

private readonly CategoryBusiness _categoryBusiness = new CategoryBusiness();

方法2

private readonly CategoryBusiness _categoryBusiness;

public CategoryController() : this(new CategoryBusiness())
{

}

public CategoryController(CategoryBusiness categoryBusiness)
{
    _categoryBusiness = categoryBusiness;
}

更新: 我的确切问题是

在声明中初始化只读字段是否与在构造函数中使用相同的值初始化它相同?

4

4 回答 4

5

同样readonly字段可以通过声明或在构造函数中赋值。

只读(C# 参考)

当字段声明包含 readonly 修饰符时,对声明引入的字段的赋值只能作为声明的一部分或在同一类的构造函数中发生。

通过构造函数对其进行初始化具有在对象初始化期间为字段分配值的额外好处。(正如 LukeHennerley 的评论)

readonly 关键字与 const 关键字不同。const 字段只能在字段声明时进行初始化。只读字段可以在声明或构造函数中初始化。因此,只读字段可以具有不同的值,具体取决于使用的构造函数

于 2013-05-07T09:39:06.390 回答
0

显然,方法 2 允许在构造函数中指定CategoryBusiness对象,而方法 1 不允许。

于 2013-05-07T09:40:04.073 回答
0

它们在将某些东西初始化为固定值方面是相同的。然而,后者更灵活,因为它允许某人指定另一个实例,这可能对子类有用。

于 2013-05-07T09:40:35.370 回答
0

第一个在调用构造函数之前为 _categoryBusiness 赋值(所以你可以在构造函数中使用 is right)。第二个在构造函数中为 _categoryBusiness 分配一个值,因此您只能在此分配之后使用它。第二个的优点是您可以从调用代码中更改此只读值。第一个的优点是它真的是只读的。

于 2013-05-07T09:46:55.167 回答