c#在构造函数内部或外部声明变量
我试图理解构造函数内部或外部类的变量声明的区别。在本例中,创建等级列表。对我来说,下面的方法达到了相同的结果,因此建议采用这种方法,有什么理由让我这样做吗?我有一种方法被注释掉了,另一种没有c#在构造函数内部或外部声明变量,c#,C#,我试图理解构造函数内部或外部类的变量声明的区别。在本例中,创建等级列表。对我来说,下面的方法达到了相同的结果,因此建议采用这种方法,有什么理由让我这样做吗?我有一种方法被注释掉了,另一种没有 class Book { //List<double> grades; List<double> grades = new List<double>(); public Book() { //Why not declare
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);
}
}
@R.J.Dunnill嗯,不,根本不是这样。@R.J.Dunnill:看看注释掉的行,我认为OP的意思是为什么不将声明从初始化中分离出来。您在这里描述的两种方法在功能上是相同的。在实践中,更重要的是保持一致性,而不是担心其他任何事情。@R.J.Dunnill是的,你的评论是完全错误的。最大的区别是当有多个构造函数时。在一个地方初始化一个类成员很好。如果没有指定字段,则该字段将被初始化为该类型的默认值。另外需要注意的是初始化的顺序。如果我没记错的话,在第行中初始化的字段(即,在构造函数之外)会被初始化,就像代码在正在运行的构造函数前面一样。@R.J.Dunnill:是的,从技术上讲是这样的。我通常认为
null
-初始化字段实际上是未初始化的。是的,它不是很有用。@Flydog57是的,您记得正确。
class Book
{
public List<double> Grades {get;} = new List<double>();
}