【问题标题】:Why instantiate variable in constructor and why use property to access a variable为什么在构造函数中实例化变量以及为什么使用属性来访问变量
【发布时间】:2014-08-15 14:58:01
【问题描述】:

我有几个基本问​​题。我在代码中看到了很多类似下面的内容:

public class User
{
    private IList<Person> _person;
    public User()
    {
        _person = new IList<Person>();
    }

    public IList<Person> personList 
    {
        get { return _person; }
        (protected) set { _person = value; }
    }
}
  1. 在 ctor 中实例化变量有什么好处?为什么在声明的时候不实例化呢?无论如何,您在创建实例时都在实例化变量,那么为什么不在声明期间设置它呢?

  2. 为什么将变量设置为私有,然后允许公共属性访问它? (我已将 protected 放在括号中,我可以看到这样做的好处 - 只允许子类或自身设置该属性),但说您没有 protected 或 private 设置。如果你只是将变量设置为公共不是更好吗?

【问题讨论】:

  • 第一个问题,如果你想在构造函数中传递参数并使用它们来实例化你的变量呢?
  • 当你的父母(公共财产)可以告诉你去打扫时,拥有自己的私人卧室(变量)有什么意义?

标签: c# .net properties constructor encapsulation


【解决方案1】:

在ctor中实例化变量有什么好处?为什么在声明的时候不实例化呢?反正在创建实例的时候就是在实例化变量,为什么不在声明的时候设置呢?

是一样的。当您声明一个类级变量并在同一行实例化它时,它会将其内联到构造函数(常规或静态)。

有关更多信息,请参阅Initialize class fields in constructor or at declaration?

为什么要将变量设置为私有,然后允许公共属性访问它? (我已将 protected 放在括号中,我可以看到这样做的好处 - 只允许子类或自身设置该属性),但说您没有 protected 或 private 设置。把变量设为public不是更好吗?

因为一个属性,它被翻译成一个方法调用,可能让你在设置变量之前在它里面做更多的事情。一个简单的例子是验证输入值是否符合您的预期。

更多区别请见Public Fields versus Automatic Properties

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 2019-10-13
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多