【发布时间】:2012-12-19 07:20:26
【问题描述】:
声明有什么用
private Int64 _ID ;
public Int64 ID{get { return _ID; }set { _ID = value; } };
这样声明一个私有变量
现在通常在编码中我们直接使用 ID,然后访问私有的 _ID。 这如何提供更高的安全性而不是直接声明为
public int64 ID{get;set;}
【问题讨论】:
声明有什么用
private Int64 _ID ;
public Int64 ID{get { return _ID; }set { _ID = value; } };
这样声明一个私有变量
现在通常在编码中我们直接使用 ID,然后访问私有的 _ID。 这如何提供更高的安全性而不是直接声明为
public int64 ID{get;set;}
【问题讨论】:
两全其美:
public long ID {get;set;}
这不是更容易吗?
您不应该将字段公开为public,但这并不意味着您也需要冗长。
【讨论】:
您可以通过 get 和 set 方法获得封装的 benefit,以便调用您可以放置 custom logic 的位置。私有_ID 是一个占位符,用于在某些主体写入_id 时通过set 方法保存您的属性为protected 的数据,同样您可以在get 给出值之前放置自定义逻辑。
这是msdn 对属性的解释“属性结合了字段和方法的各个方面。对于对象的用户来说,属性似乎是一个字段,访问该属性需要相同的语法。对于一个类的实现者,一个属性是一个或两个代码块,代表一个get访问器和/或一个set访问器。get访问器的代码块在读取属性时执行;set访问器的代码块在读取时执行该属性被分配了一个新值。没有 set 访问器的属性被认为是只读的。没有 get 访问器的属性被认为是只写的。具有两个访问器的属性是读写的。"。你可以通过here阅读更多内容。
【讨论】:
您应该阅读有关Properties 和Fields 的信息。属性提供了更好的封装,应该使用而不是暴露公共字段。
【讨论】:
private。现在你有一个从外部只读的属性。
在设置和获取值之前检查输入或输出时会带来安全性,请看:
private int? _ID;
public int ID
{
get { return _ID ?? 0; }
set { _ID = value >= 0 ? value : 0; }
}
【讨论】: