C# 什么时候应该使用私有变量,什么时候应该使用属性。支持字段是否应在同一类中使用?

C# 什么时候应该使用私有变量,什么时候应该使用属性。支持字段是否应在同一类中使用?,c#,.net,properties,C#,.net,Properties,在大多数情况下,我们通常创建一个私有变量及其相应的公共属性,并使用它们来执行我们的功能 每个人都有不同的方法,比如有些人在任何地方都使用属性,有些人在同一个类中使用私有变量,因为它们是私有的,并通过使用属性打开它供外部环境使用 假设我使用一个场景,比如在数据库中插入。 我创建了一些需要初始化的参数 我创建了10个私有变量及其相应的公共属性 它们被给出为 private string name; public string Name { get{return name;}

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

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

假设我使用一个场景,比如在数据库中插入。 我创建了一些需要初始化的参数

我创建了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.
   }
在这种情况下,应该怎么做

结论是什么

我真的想问这个。
我们是否应该在该类中使用变量,或者应该在同一类中的任何地方都使用属性

我从不公开公共变量。为什么?因为我不能对它们设置约束,而当我使用属性时我可以。我可以先检查值是否符合我的约束条件(例如电子邮件地址),然后保存它。否则我将抛出一个异常。

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

public string Name {get; set;}

我不应该让变量公开-始终使用属性,以便在不更改接口的情况下添加约束或更改行为。

使内容更具可读性:

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

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

如果没有很好的理由,您永远不应该公开公共变量。很难说“永不”,因为如果您试图与comm类型的组件进行互操作,您可能也需要这样做

任何公开曝光的东西都应该是财产。为什么呢

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

我个人使用属性,仅当我希望属性不仅仅用于获取或设置时才创建成员变量(因为使用C#3.0的快捷属性很容易)


如果我不想让某个属性公开,我会将其设置为私有,并且只在我也公开的情况下才公开。

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

您的意思是什么“在这些情况下,应该在内部变量或属性中使用什么”……在什么情况下,我认为问题是:如果您有一个带有支持的属性,则为私有字段(不是自动实现的属性),那么在同一个类中,您是否使用字段或属性来获取/设置?从不公开公共变量意味着?您创建私有属性并使用公共属性处理它们。在设置私有变量的值之前进行检查。?是吗?是的,每次都使用私有变量并使用公共属性公开它们。因此,您可以检查应用程序中的任何业务约束。我应该在内部使用变量还是在那里也应该使用属性。?在内部,我也使用属性,因为属性名称以大写字母开头,所以可以立即清楚地知道它是属性还是来自其他地方的变量。仅使用(the)如果读取/写入属性涉及一些您不想在此时触发的复杂内容,则变量。属性是关于隐藏复杂性的,因此最好始终使用该属性。这样您就不必考虑副作用,因为您知道该属性将处理所有问题。Thx为了解释,我阅读了关于bac的内容king fields.是的,这个问题是关于支持字段的用法,您已经纠正了这个问题。+1.我的“经验法则”是专门使用自动实现的属性,除非我有特定的理由不使用。getter/setter和非标准实现中的逻辑(例如实现INotifyPropertyChanged)是规则的主要例外。+1用于提及自动实现的属性。我在大多数情况下也使用自动实现的属性。