c# 在构造函数内部或外部声明变量

标签 c#

<分区>

我试图理解类在构造函数内部或外部的变量声明的区别。在这种情况下,创建成绩列表。对我来说,下面的结果是一样的,所以推荐哪个,我有什么理由应该做一个或另一个吗?我有一种方式被注释掉,另一种方式没有。

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);
    }
}

最佳答案

这里有相当多的个人意见空间,但一般来说:

  1. 在同一行中声明和初始化字段有助于您验证字段是否已初始化,而无需查看多个位置。如果您看到声明的字段没有初始化程序,则必须查看代码的不同部分以查看该项目是否正在初始化。
  2. 在某些情况下(例如当初始值基于构造函数参数时)您无法内联初始化字段。因为您有时需要在构造函数中初始化字段,有些人会争辩说总是在那里初始化它们更一致。

您可能还想问:我是否应该要求/允许在构造函数中提供初始值?

    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>();
    } 

关于c# 在构造函数内部或外部声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57333661/

相关文章:

c# - 两个 LINQ 语句对应一个可等待的 LINQ 数据库查询(优化)

c# - 导出datagridview到word文档c#

c# - Google 通讯录 API 问题

c# - 如何显示varBinary字段数据

c# - 如何在 Resharper 4.5 中使用 bdd 命名风格?

javascript - 我怎样才能获得这个链接元素?始终显示 "Unable to find element with link text == Search"

c# - WMI 硬件,获取 RAM 信息

c# - 使用 XtraScheduler 通过特定自定义字段值获取约会

c# - 母版页Page_Load方法运行在aspx页面Page_Load方法之后

c# - 将 javascript gettime() 转换为 c# 日期时间