从类中返回私有值的最佳方法是什么?

时间:2016-08-31 21:13:23

标签: c# class optimization private public

我正在尝试优化我的代码以获得最大的可读性,并且我需要我的代码在线直通。我将以两个代码片段为例。在我眼里,下面的一个对眼睛来说更容易。这些片段(其中一个)将存储在一个类中,并且只能在类中设置 width ,同时始终可以获得 Width

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

B:

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

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

两种方法都有任何缺点/好处。一种方法应该优于另一方吗? A和B的方法是否完全相同?

2 个答案:

答案 0 :(得分:1)

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

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

在表面之下,当然,.Net编译器将所有属性getter和setter转换为方法,(在IL代码中没有属性这样的东西),但上面阐述的主要使您可以一目了然表达式是“做”某事,或者只是访问属性。

答案 1 :(得分:1)

不确定为什么所有内容都必须完全符合要求,或者为什么这样做会使其更具可读性。

在任何情况下,这似乎都是最简洁的实现。

public int Width 
{ 
    get; 
    private set; 
}

如果真的必须删除空格,但我不确定这是否真的有所改善。

public int Width { get; private set; }

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

  

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

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

属性的行为应该像字段一样;如果方法不能,   它不应该改为财产。方法比   以下情况中的属性:

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