我正在上新课,我发现自己在想:写作之间有什么区别:
public string temp;
并写作:
private string temp; public string temp_ { get { return temp; } set { temp = value; } }
我猜这是一个新手问题,但我没有找到绝对答案......在这两种情况下,似乎我都可以访问课外的对象.私人表格只是一种草率的方式吗?
是的,不同之处在于您拥有房产.C#中的属性是具有一对get和set 方法的语法糖 .实际上,编译器接受代码块并创建两个单独的方法:get_PropertyName
和set_PropertyName
, PropertyName
属性的名称.这些方法具有分别在get
和 set
块中实现的确切逻辑,使用属性的代码实际上将在后台调用这些方法.
这样做的好处是您可以完全控制设置和检索值的方式.
示例 - 假设您要存储年龄:
public int Age;
现在任何使用你班级的人都可以轻松地将年龄设置为他们喜欢的任何值 - 1000,-1,任何东西.
现在,如果你有一个属性,你可以确保不会发生:
private int _age = 0; public int Age { get { return _age; } set { if ( value >= 0 && value < 120 ) _age = value; } }
大多数情况下,将公共字段声明为公共属性是有益的,即使您不需要任何验证逻辑,因为您可能需要在将来添加一个,如果您通过首先创建属性主动执行,其他使用您的库的代码不需要重新编译即可工作.
属性还可以让您对getter和setter的可见性进行更细粒度的控制.您可以拥有public
带public
getter和private
setter 的 属性, 以确保只有类本身可以更改属性的状态.
public Connected { get; private set; }
此外,有些地方你真的需要拥有一个房产.其中之一是 INotifyPropertyChanged
在MVF模式中使用WPF,UWP等界面.数据绑定需要绑定一个属性(尽管如果您不需要通知,这并非完全正确,因为{x:Bind}
UWP中的新语法可以绑定到普通字段).