初始化变量

时间:2013-05-07 09:37:30

标签: c#

声明中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 个答案:

答案 0 :(得分:5)

可以使用声明或构造函数为其相同readonly字段分配值。

readonly (C# Reference)

  

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

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

  

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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