【问题标题】:Initializing Variables [duplicate]初始化变量 [重复]
【发布时间】:2013-05-07 09:37:30
【问题描述】:

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;
}

更新: 我的确切问题是

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

【问题讨论】:

  • 这是个谜吗?测验?我们可以在哪里发送答案?我们能赢什么?请提供一个有意义的问题,以便以后的访问者从中受益。现在你只是要求我们复制 C# 手册。
  • @CodeCaster,您能否提供我在 C# 手册中的问题的答案的链接。我以前总是先用谷歌搜索,然后再在这里提出问题......谢谢......
  • 您可以查找您有疑问的每个部分的手册。现在你的问题只是问“声明的区别”是什么,这很简单:readonly (C# Reference): “当字段声明包含只读修饰符时,对引入的字段的赋值by 声明只能作为声明的一部分或在同一类的构造函数中出现"。所以这就是你的答案。
  • (cont) 在方法 1 中,您在声明中分配一个变量,在方法 2 中,您从构造函数中进行。我只是好奇你会用这个答案做什么,以及它将如何帮助你或其他人,仅此而已。
  • 只看到这个问题:stackoverflow.com/questions/2761393/…

标签: c#


【解决方案1】:

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

readonly (C# Reference)

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

通过构造函数初始化它还有一个额外的好处,那就是在对象初始化期间为该字段分配一个值。 (正如 LukeHennerley 的评论)

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

【讨论】:

  • +1 谢谢,那么没有 readonly 会有什么不同吗?
  • +1 :) 虽然赋值是一样的,但你在构造函数中拥有更多的控制权,你可以在赋值之前修改传入的对象。
  • @SSS,没有readonly,你可以保持原样,不初始化。但是对于readonly,它必须在声明期间或构造函数中初始化
  • @SSS,不客气
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-10
        • 2016-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-13
        • 2013-02-22
        • 2019-01-24
        相关资源
        最近更新 更多