使用属性在C#中进行数据封装

Fer*_*hat 6 c# encapsulation properties member

目前我在思考C#中的数据封装,我有点困惑.几年前,当我开始用C++学习编程时,我的教授告诉我:"创建一个类并隐藏它的数据成员,所以它不能直接从外部操作"

示例:您正在解析XML文件并将解析后的数据存储到解析器类中的某些数据成员中.

现在,当我在看C#时.你有那里的财产.此功能使类的内部状态/内部数据对外可见.没有封装了.对?

private string _mystring;
public string MyString
{
  get {return _mystring;}
  set {_mystring = value;}
}
Run Code Online (Sandbox Code Playgroud)

从我的角度来看,将数据成员公开或具有公共属性(具有getter和setter)的公共属性与传递私有数据成员之间没有区别.

有人可以解释我吗?

谢谢

Ree*_*sey 15

私有数据由属性本身封装.访问数据的唯一方法是通过属性.

在您的情况下,没有理由使用该属性.但是,如果您以后需要添加一些验证,则可以在不破坏API的情况下,即::

private string _mystring;
public string MyString
{
  get {return _mystring;}
  set 
  {
      if (IsAcceptableInput(value))
         _mystring = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

请记住,.NET中的一个属性实际上只是两种方法的更简洁的语法 - 属性获取部分的一种方法,属性集部分的一种方法.它提供了与C++中的一对方法相同的封装,但是(可以说)更好的语法用于使用.