为什么在构造函数中实例化变量以及为什么使用property来访问变量

时间:2014-08-15 14:58:01

标签: c# .net properties constructor encapsulation

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

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. 为什么要将变量设置为私有,然后允许公共属性访问它? (我把保护放在括号中,我可以看到它的优点 - 只允许子类或它自己设置该属性),但是说你没有受保护或私有集。如果你只是将变量设置为公共,那不是更好吗?

1 个答案:

答案 0 :(得分:2)

  

在ctor中实例化变量有什么好处?为什么不在声明时实例化它?无论如何,您在创建实例时实例化变量,为什么不在声明期间设置它?

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

有关详情,请参阅Initialize class fields in constructor or at declaration?

  

为什么要将变量设置为私有,然后允许公共属性访问它? (我把保护放在括号中,我可以看到它的优点 - 只允许子类或它自己设置该属性),但是说你没有受保护或私有集。如果你只是将变量设置为公共,那不是更好吗?

因为转换为方法调用的属性可能允许您在设置变量之前在其中执行更多操作。一个简单的例子就是验证输入值是否符合预期。

如需更多差异,请参阅Public Fields versus Automatic Properties