【问题标题】:What is the optimal way to return a private value from inside a class? [closed]从类内部返回私有值的最佳方法是什么? [关闭]
【发布时间】:2016-08-31 21:13:22
【问题描述】:

我正在尝试优化我的代码以获得最大的可读性,为此我需要我的代码始终保持一致。我将以两个 sn-ps 代码为例。在我看来,下面的一个对眼睛来说更容易。这些 sn-ps(其中之一)将存储在一个类中,并且设置 width 应该只能在类内部进行,而获取 Width 应该始终是可能的。

答:

private int width;
public int Width
{
    get { return width; }
    private set { }
}

乙:

private int width;
public int Width()
{
    return width;
}

就我而言,这两种实现相同最终结果的方法是相同的。因为我想在我的所有课程中完全符合要求,所以我不想将两种方式混合使用。 B-approach 在我看来似乎更干净。

这两种方法是否有任何缺点/优点。一种方法是否应该优于另一种方法? A 和 B 方法真的完全一样吗?

【问题讨论】:

  • public int Width { get; private set; }
  • Imo 调用一个方法(它应该执行某些功能)来获取或设置一个值是没有意义的,就像它不会期望广泛的功能一样从属性中获取值时执行。我认为您的 B 选项更简洁,但这可能只是取决于相关编码器的选择和风格。
  • @zerkms 你能发表评论作为答案吗?

标签: c# class optimization private public


【解决方案1】:

一般最佳实践表明,在进行面向对象编程时,您应该使用方法来执行操作,这可能会或可能会影响对象的状态(除了单个属性值),并且您应该使用属性(setter 和getters) 来获取或设置对象属性。

因此,方法名称应该(通常)描述方法的作用(语法应该像动词),而属性名称应该是名词(引用对象的某些属性)

当然,从表面上看,.Net 编译器将所有属性 getter 和 setter 都转换为方法,(在 IL 代码中没有属性之类的东西),但上面阐述的原理让您一眼就能看出是否表达式是“做”某事,或者只是访问一个属性。

【讨论】:

    【解决方案2】:

    不确定为什么所有内容都必须完全内联,或者为什么这会使任何内容更具可读性。

    无论如何,这似乎是最简洁的实现。

    public int Width 
    { 
        get; 
        private set; 
    }
    

    如果你真的必须删除空格,但我不确定这是否真的是一种改进。

    public int Width { get; private set; }

    MSDN 在这种情况下提供了一些指导:

    在大多数情况下,属性代表数据,方法执行操作。 属性像字段一样被访问,这使得它们更易于使用。一个 如果其中之一,方法是成为属性的良好候选者 条件存在:

    • 不带参数并返回对象的状态信息。
    • 接受单个参数来设置对象的某些状态。

    属性应该像字段一样表现;如果方法不能, 它不应更改为属性。方法优于 以下情况下的属性:

    • 该方法执行耗时的操作。该方法明显比设置或获取所需的时间慢
      字段的值。
    • 该方法执行转换。访问字段不会返回其存储的数据的转换版本。
    • Get 方法具有可观察到的副作用。检索字段的值不会产生任何副作用。
    • 执行顺序很重要。设置字段的值不依赖于其他操作的发生。
    • 连续调用该方法两次会产生不同的结果。
    • 该方法是静态的,但返回一个可由调用者更改的对象。
    • 检索字段的值不允许调用者更改字段存储的数据。
    • 该方法返回一个数组。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2014-10-15
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      相关资源
      最近更新 更多