我试图理解类在构造函数内部或外部的变量声明的区别。在这种情况下,创建成绩列表。对我来说,下面的结果是一样的,所以推荐哪个,我有什么理由应该做一个或另一个吗?我有一种方式被注释掉,另一种方式没有。
class Book
{
//List<double> grades;
List<double> grades = new List<double>();
public Book()
{
//Why not declare it here?
//grades = new List<double>();
}
public void AddGrade(double grade)
{
grades.Add(grade);
}
}
这里有相当多的个人意见空间,但一般来说:
- 在同一行中声明和初始化字段有助于您验证字段是否已初始化,而无需查看多个位置。如果您看到声明的字段没有初始化程序,则必须查看代码的不同部分以查看该项目是否正在初始化。
- 在某些情况下(例如当初始值基于构造函数参数时)您无法内联初始化字段。因为您有时需要在构造函数中初始化字段,有些人会争辩说总是在那里初始化它们更一致。
您可能还想问:我是否应该要求/允许在构造函数中提供初始值?
class Book
{
readonly List<double> grades;
public Book() : this(Array.Empty<double>())
{
}
public Book(IEnumerable<double> grades)
{
this.grades = grades.ToList();
}
public void AddGrade(double grade)
{
grades.Add(grade);
}
}
并且:我的类实际上应该只是一个没有构造函数或逻辑的哑数据容器吗? (book.AddGrade(...)
真的比 book.Grades.Add(...)
更明智吗?)
class Book
{
public List<double> Grades {get;} = new List<double>();
}