【问题标题】:Class initialization - Property vs Field类初始化 - 属性与字段
【发布时间】:2013-11-01 11:10:53
【问题描述】:

我想知道class initialization 的最佳做法是什么。

可以写:

private myClass mc = new myClass();

或者:

private myClass mc { get; set; }

public Foo()
{
    mc = new myClass();
}

我总是倾向于将其用作field。将类用作 property 有什么缺点吗?我在 google 上进行了一些搜索,但没有一个结果可以很好地回答这个特定问题。

【问题讨论】:

标签: c# class properties initialization field


【解决方案1】:

如果它是私有的,则将其设为财产并没有显着的好处。我只是把它作为一个领域。我使用属性作为 API 与 其他 类进行通信的一种方式。

【讨论】:

  • 我错过了该物业是私有的这一事实,因为我以前从未见过有人这样做。私有财产肯定没有任何好处。
  • @DavidArno 我故意将它们设置为私有,因为我想知道 class initialization 应该如何在类本身中完成。根据答案,我会坚持使用field way :)
  • @DeMama 对你有好处 :)
  • 如果有一些逻辑,甚至是类内部的逻辑,我会把它变成一个属性,它应该与属性隔离。但是,对于自动实现的属性,我同意这确实没有什么实际好处。
【解决方案2】:

您在第二个示例中使用属性是不必要的。你可以写成:

private myClass mc;

public Foo()
{
    mc = new myClass();
}

【讨论】:

    【解决方案3】:

    属性是 getter/setter,这意味着它们提供了信息隐藏机制的一部分。将它们设为私有并没有多大作用,因为类中的所有方法都可以看到私有成员。

    【讨论】:

      【解决方案4】:

      我更喜欢第一种方式:

      private myClass mc = new myClass();

      因为:

      • 私有财产没有任何好处。
      • 如果您创建另一个构造函数,则会复制初始化代码,除非您创建一些 Init 方法或调用 this(),这不像简单地初始化字段那样清晰。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 2017-09-29
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多