c# 中get set的问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 23:54:16
e.g.
private int _flag;
public int flag
{ get{return _flag;}
set{_flag=value;}
}
为什么要这样写呢?
直接把_flag定义成public的然后取值赋值不行么
好多都是写成e.g.那种

行但是不好,是很不好!属性的灵活性和用途比公共变量大的多。看看官方的定义。

属性结合了字段和方法的多个方面。对于对象的用户,属性显示为字段,访问该属性需要完全相同的语法。对于类的实现者,属性是一个或两个代码块,表示一个 get 访问器和/或一个 set 访问器。当读取属性时,执行 get 访问器的代码块;当向属性分配一个新值时,执行 set 访问器的代码块。不具有 set 访问器的属性被视为只读属性。不具有 get 访问器的属性被视为只写属性。同时具有这两个访问器的属性是读写属性。

与字段不同,属性不作为变量来分类。因此,不能将属性作为 ref(C# 参考)参数或 out(C# 参考)参数传递。

属性具有多种用法:它们可在允许更改前验证数据;它们可透明地公开某个类上的数据,该类的数据实际上是从其他源(例如数据库)检索到的;当数据被更改时,它们可采取行动,例如引发事件或更改其他字段的值。

当然可以定义成public的然后取值赋值,但是出于系统安全性和稳定性的考虑,还是要用get和set方法取值和附值,防止可以直接访问到内部属性,可能造成错误。

你写的当然和public的是一样的.
但是如果你只是想给变量只读属性或是只写属性时就得按照上面的写法了.