为什么使用公共变量?

2024-04-04

变量、方法和类可以获得不同的安全级别。 根据我的 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(使用前将#替换为@)

为什么使用公共变量? 的相关文章

随机推荐