为什么要在构造函数中实例化变量,为什么要使用属性来访问变量

本文关键字:为什么 变量 属性 访问 构造函数 实例化 | 更新日期: 2023-09-27 18:18:13

我有几个基本的问题。我在代码中看到了很多像下面这样的东西:

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. 在actor中实例化变量的优势是什么?为什么不在声明时实例化它呢?无论如何,在创建实例时都要实例化变量,所以为什么不在声明期间设置它呢?

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

为什么要在构造函数中实例化变量,为什么要使用属性来访问变量

在actor中实例化变量有什么好处?为什么不在声明时实例化它呢?无论如何,在创建实例时都要实例化变量,所以为什么不在声明期间设置它呢?

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

有关更多信息,请参见在构造函数或声明中初始化类字段?

为什么将变量设置为私有,然后允许公共属性访问它?(我把protected放在括号里,我可以看到这样做的好处——只允许子类或它自己设置该属性),但是假设你没有protected或private set。如果将变量设置为public不是更好吗?

因为被转换为方法调用的属性可以让您在设置变量之前在其内部执行更多操作。一个简单的例子是验证输入值是否符合您的期望。

有关更多差异,请参见公共字段与自动属性