我们何时应该使用私有变量,何时应该使用属性。 Do Backing Fields应该在同一个类中使用吗?

时间:2010-05-26 12:30:31

标签: c# .net properties

在大多数情况下,我们通常会创建一个私有变量及其相应的公共属性,并使用它们来执行我们的功能。

每个人都有不同的方法,就像有些人在每个地方都使用属性,有些人在同一个类中使用私有变量,因为它们是私有的,并通过使用属性打开它以供外部环境使用。

假设我在场景中说插入数据库。 我创建了一些需要初始化的参数。

我创建了10个私有变量及其对应的公共属性 以

的形式给出
private string name;
public string Name
   {
     get{return name;}
      set{name=value;}
   }

等等。在上面提到的这些情况下,应该使用内部变量或属性。

在那些情况下

public string Name
   {
     get{return name;}
     set{name=value>5?5:0;} //or any action can be done. this is just an eg.
   }

在这种情况下应该做些什么。

结论是什么

我其实是想问这个。 我们是否应该在该类中使用变量,或者我们是否应该在同一类中使用属​​性。

6 个答案:

答案 0 :(得分:4)

如果使用auto-implemented properties,则该字段将被隐藏,因此您将被迫使用该属性,即使在定义属性的类中也是如此。自动实现的属性是个好主意,除非您需要向getter / setter添加一些逻辑。

答案 1 :(得分:1)

如果私有变量的唯一用途是作为存储容器,您可以使用:

public string Name {get; set;}

恕我直言,不应该公开变量 - 总是使用属性,以便稍后在whitout更改界面时添加约束或更改行为。

答案 2 :(得分:1)

让事情更具可读性:

  • 我总是通过属性公开我的数据。
  • 如果我不需要额外的逻辑(例如验证),我使用隐式属性。这种方式没有支持领域,我无法偶然访问它。如果我需要添加一些额外的逻辑,我可以轻松地将隐式属性更改为“传统”属性。当我在任何地方使用该属性时,我不必担心我的额外逻辑没有被调用。
  • 如果我需要额外的东西(比如验证),那么我有一个私有支持字段,但我只在属性体(get / set访问器)中访问此字段。如果我在属性中更改某些内容,我也不必担心:我的代码将始终使用相同的逻辑。
  • 在我看来,没有调用该属性的唯一原因是,如果由于某种原因我真的不想要任何额外的逻辑被调用,但这似乎是危险的,所以我宁愿避免它......

答案 3 :(得分:0)

我从不暴露公共变量。为什么?因为我不能对它们施加约束,而我可以在使用属性时。如果它符合我的约束(例如电子邮件地址),我可以先检查它,然后保存它。否则我会抛出异常。

答案 4 :(得分:0)

你绝不应该在没有充分理由的情况下暴露公共变量。很难说永远不会,因为如果你试图与通信类型组件互操作,你可能也需要它。

公开曝光的任何内容都应该是属性。那是为什么?

原因是如果您需要更改值的来源,或添加一些业务逻辑检查它是否是公共成员,您将需要使用代码进行更改的任何内容。如果它是属性,您可以更改内部逻辑,而不需要任何人使用它来更改代码。

我个人使用属性,只创建成员变量,当我希望属性不仅仅是获取或设置时(因为这对于带有快捷方式属性的C#3.0来说很容易)。

如果我想保护某个地产不被公开曝光,我会把它作为私人财产,并且只有在我拥有时才曝光。

答案 5 :(得分:0)

我们在某些情况下需要显式私有变量,例如set之前的验证。有时我们还需要转换输入,例如,格式化输入。