0

我有这个关于 C# 中获取设置访问器的问题。

{
   private string _mvalue
   public string MyValue 
   {
       get
       {
           return mvalue;
       }
       set
       {
           _mvalue = value;
       }
}

在这里,_mvalue 是私有的。我们将其设为私有,以便在课堂外无法访问它。但话又说回来,我们在这个私有变量上创建了一个属性“MyValue”。使用属性我们可以访问私有变量。所以你不认为我们在变量的隐私性上妥协了。我的意思是,该变量是私有的。但是,在属性的帮助下,外人仍然可以访问这个变量

4

4 回答 4

3

创建 _mvalue 不是为了将 MyValue 的值设为私有。_mvalue 是维护公共财产 MyValue 的状态所必需的。该对象的任何用户都不能访问 _mvalue,只要它是私有的。此外,MyValue 可能包含与 _mvalue 不同的值。例如,您可以返回 _mvalue+"/"。除此之外,并非每个像 _mvalue 这样的私有字段当然都需要具有公共属性。

有几种方法可以防止访问数据变量,例如:

  • 仅使用私人成员

  • 使用私有财产

使用自动属性可以减少混淆,请参阅接受的答案:自动属性

于 2013-10-20T07:07:43.750 回答
3

这很好。没有人让你为你的班级添加公共财产。如果您真的想_mvalue真正保持私有,请不要将使用它的公共财产设为公共财产。

于 2013-10-20T07:47:01.330 回答
1

通常,当我们想在设置或获取值期间进行一些额外的操作时,我们会在属性中使用私有变量。例如,我总是想将分配的值与 5 相乘,在这种情况下,我们可以使用类似这样的东西

public int A
{
   get
   {
      return a;
   }
   set 
  {
     a=value*5;
  }
} 

但是,如果您只想存储一个应该由类外部访问的值,那么您可以编写一个没有私有变量的属性,如下所示

 public int A
 {
   get;
   set;
 } 

如果您只想公开值,但没有人应该将值设置在类之外,那么您甚至可以将 set 设置为私有。

始终属性是在类外部公开值,但这取决于您的逻辑您要如何编写,您可以在其中使用私有变量或不需要,通常私有变量在绑定到 Wpf 时与属性一起使用控件(MVVM)来实现 INotifyPropertyChanged。

如果您在属性中使用私有变量而在 get 或 set 中没有任何自定义逻辑,那么这是一种糟糕的编程风格,就像在类外暴露一个私有成员

于 2013-10-21T02:44:06.877 回答
0

首先是私有变量“_mvalue”不能从外部访问,因为它是私有的。其次,如果你想真正保护“MyValue”,即外人只能访问“Ge​​t”属性,那么使用private关键字和“set”。

private string _mvalue;    
public string MyValue     
{
        get
       {
           return _mvalue;
       }
       private set
       {
           _mvalue = value;
       }   

}
于 2014-09-11T12:48:03.500 回答