我正在尝试优化我的代码以获得最大的可读性,并且我需要我的代码在线直通。我将以两个代码片段为例。在我眼里,下面的一个对眼睛来说更容易。这些片段(其中一个)将存储在一个类中,并且只能在类中设置 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的方法是否完全相同?
答案 0 :(得分:1)
一般来说,最佳实践表明,在进行面向对象编程时,应该使用方法来执行操作,这些操作可能会或可能会影响对象的状态(除了单个属性值),并且您应该使用属性(setters和getters)获取或设置对象属性。
因此,方法名称(通常)应描述该方法的作用(语法应该像动词一样),而属性名称应该是名词(引用对象的某些属性)
在表面之下,当然,.Net编译器将所有属性getter和setter转换为方法,(在IL代码中没有属性这样的东西),但上面阐述的主要使您可以一目了然表达式是“做”某事,或者只是访问属性。
答案 1 :(得分:1)
不确定为什么所有内容都必须完全符合要求,或者为什么这样做会使其更具可读性。
在任何情况下,这似乎都是最简洁的实现。
public int Width
{
get;
private set;
}
如果真的必须删除空格,但我不确定这是否真的有所改善。
public int Width { get; private set; }
MSDN在这种情况下提供了一些指导:
在大多数情况下,属性表示数据,方法执行操作。 像字段一样访问属性,这使它们更容易使用。一个 如果其中之一,方法是成为财产的良好候选人 条件存在:
- 不带参数并返回对象的状态信息。
- 接受一个参数来设置对象状态的某些部分。
属性的行为应该像字段一样;如果方法不能, 它不应该改为财产。方法比 以下情况中的属性:
- 该方法执行耗时的操作。该方法明显慢于设定或获得所需的时间 一个字段的价值。
- 该方法执行转换。访问字段不会返回其存储的数据的转换版本。
- Get方法具有可观察到的副作用。检索字段的值不会产生任何副作用。
- 执行顺序很重要。设置字段的值不依赖于其他操作的发生。
- 连续两次调用该方法会产生不同的结果。
- 该方法是静态的,但返回一个可由调用者更改的对象。
- 检索字段的值不允许调用者更改字段存储的数据。
- 该方法返回一个数组。