为编程标准使用私有auto属性而不是简单变量
本文关键字:属性 变量 简单 auto 标准 编程 | 更新日期: 2023-09-27 17:57:49
在与同行的讨论中,有人提出我们应该考虑对所有类级变量使用自动属性。。。包括私人的。
因此,除了这样的公共财产:
public int MyProperty1 { get; set; }
我们的私有类级别变量如下所示:
private int MyProperty2 { get; set; }
代替:
private int _myProperty2;
我对为什么有人会想这样做持保留态度,但我无法确定我不愿意接受这一点是因为我自己的内部洗脑,我如何按照我使用了10年的相同编程标准和命名惯例编写代码,还是因为我以前从未见过这种情况(有原因)。
我意识到这是一个额外的代码来键入,但老实说,当使用自动属性时,由于"prop"answers"propg"片段,我认为我从未键入过它,所以设置一个新的片段来创建一个私有的自动属性非常简单,所以额外的代码不会太困扰我,因为我从来没有必要键入它。
除了美学(这可能只是我的潜意识)之外,使用完全私人的汽车物业会带来什么问题吗?有什么好的理由这样做或不这样做吗?我在stackoverflow、codeplex、codeproject等平台上看到了很多代码,但我从未见过有人使用这个标准。。。。有原因吗?
在我看来,私有汽车属性完全没有意义。私人汽车财产提供了什么价值,而普通字段没有?
(当auto属性仅部分私有时(例如,带有私有setter的公共/受保护getter),或者当您使用私有非自动属性使您能够围绕getter/setter包装其他代码时,情况就不同了。)
这没有太大意义。
我能想到一个"好处":
- 您可以稍后向getter和/或setter添加逻辑,并确保它始终被传递
但坦率地说,你的类不应该变得太大,这是有用的。
"有什么问题吗"?
您的属性不能作为ref
或out
参数的参数。
它对私有用户的用处远不如对公共用户的用处。
假设你拿走了你的自动私有财产,后来在其中构建了一些逻辑(能够在不破坏任何东西的情况下做到这一点是自动道具的全部意义)。。。
这将要求您为要包装的属性创建一个私有支持成员。
所以现在你有两种不同的私有方法(成员和属性)来做同样的事情,尽管其中一种有隐藏的副作用(属性),而且你现在还面临着确保类中的其他方法都不能直接访问该成员的问题。
最终比从一开始就使用私人会员更令人头疼。
此策略将为您提供一个机会,在不影响获取或设置您的私有属性的任何其他代码的情况下,对以前自动生成的私有属性进行任何未来更改。我个人没有使用过太多,但在处理可能发生变化的情况下,它可能是有益的。它还对代码进行了标准化,以便属性始终可以访问字段。没有真正的缺点,但在大多数情况下也没有太大的好处。我认为在大多数情况下,风格确实是最大的驱动力。
在与同行的讨论中提出了我们应该考虑的问题对所有类使用自动属性级别变量。。。包括私人一个。
- 如果您在属性中没有任何逻辑来检索和返回值,那么这将毫无用处
- 除了第1点,您还有只读属性所以你可以直接去
public int MyProperty1 { get; set; }
此外,它还减少了代码行和快速实现
我坚信KISS。当字段可以使用时,我从不使用属性,而且我几乎没有理由使用私有访问器(get)。
属性的主要用途是作为私有数据的公共访问器。因此,对于只设置或获取值的简单proprets,私有访问器和setter毫无意义。
话虽如此,当您需要在读取数据时对其进行转换,或者当您需要更新值时执行副作用时,您应该使用字段。改变你的价值观会引发事件吗?那么,一个领域是一个无需思考的问题。但是,这并不是用{get;set;}