c# - 公约问题: When do you use a Getter/Setter function rather than using a Property

标签 c#

令我印象深刻的是,在尝试操作类中的字段时应该使用 C# 中的属性。但是当涉及到复杂的计算或数据库时,我们应该使用getter/setter。

这是正确的吗?

什么时候对属性使用 s/getter?

最佳答案

.NET 设计指南在 Properties vs. Methods 中提供了这个问题的一些答案。部分。

基本上,属性与字段具有相同的语义。你不应该让一个属性抛出异常,属性不应该有副作用,顺序不重要,属性应该相对快速地返回。如果这些事情中的任何一个可能发生,最好使用一种方法。该准则还建议使用返回数组的方法。

在决定是使用属性还是方法时,如果我将其视为字段会有所帮助。我考虑属性的行为并问自己,“如果这是类中的一个字段,如果它的行为如此,我会感到惊讶吗?”例如,考虑 TcpClient.GetStream method .它可以根据是否建立连接而抛出多个异常,并且在尝试获取流之前配置 TcpClient 很重要。因此,它是 Get 方法而不是属性。

如果仔细阅读设计指南,您会发现这通常不是偏好问题;在某些情况下,有充分的理由使用方法而不是属性。

关于c# - 公约问题: When do you use a Getter/Setter function rather than using a Property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67063/

相关文章:

c# - 如何在 C# 中将 uint 转换为 int?

c# - 尝试从 Azure 检索数据时出现 MobileServiceInvalidOperationException

c# - 自定义 JSON 序列化以节省传输的数据

c# - 将项目添加到 StackPanel 时的事件处理程序?

c# - 在 IAuthorizationPolicy 中获取服务实例

c# - 使用 ViewModel 进行验证

c# - 使用 Linq 查询连接两个字段

c# - "same"用户自定义转换存在两次时没有编译错误

c# - 如何在 C# 中创建存储过程,然后将其*保存*到 SQL Server?

c# - 如何在 CaSTLe.DynamicProxy 中使用 IInterceptor?