变量、方法和类可以获得不同的安全级别。
根据我的 C# 经验,有:
public
内部的
受保护的
受保护的内部
私人的
现在,我了解了将方法和类设为私有、内部或受保护的用途,但是变量呢?即使我将变量设置为私有,我也可以使用属性从不同的类中调用它。
我一直认为属性是最佳实践。因此,如果我可以使用它,我就不需要直接通过实例调用变量。
有什么理由不将变量设为私有吗?
编辑:我看到有些人谈论属性就好像它们只不过是美化公共变量 https://blog.codinghorror.com/properties-vs-public-variables/
快速提醒:公共变量仅返回其值。有了属性,您可以做更多事情。例如:
public int AmountOfBooks{
get {
//code to check certain conditions
//maybe trigger an event while we're at it.
//and a few conditionals.
return this.amountOfBooks;
}
set {
//a few conditionals
//maybe trigger an event
this.amountOfBooks = value;
//and I can do even more... I think, never tried this.
}
}
看过我个人资料的人都知道我是一名学生。我看到很多同学都使用属性作为“美化的公共变量”。当告诉他们可以这样做时,最常见的反应是:“允许这样做吗?”
当然,在某些情况下拥有公共领域是有意义的。例如,如果您创建一个结构体只是为了与现有的非托管 win32 API 进行互操作。
但是,如果您正在构建常规的托管对象模型,则最佳实践是将对象的属性建模为属性,并使用字段作为私下实现公开功能的机制。
更新:我将借此机会指出,我们已尝试在 C# 3.0 中非常轻松地编写一个仅访问后备存储的属性:
public int Foo { get; set; }
完全一样
private int _Foo;
public int Foo { get { return _Foo; } set { _Foo = value; } }
但更短且更容易阅读。当然,如果您稍后需要将其扩展为具有后备存储的长格式,那么这样做并不是一个重大更改。
您还可以这样做:
public int Foo { get; private set; }
如果您想创建一个对类/结构之外的代码只读的属性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)