首页 > 解决方案 > 在 C# 中,使用类构造函数设置属性和直接设置属性成员之间有区别吗?

问题描述

在 C# 中,当您使用类构造函数设置对象的属性与创建对象并直接设置属性值时,是否有好处或产生不同的结果?我是 C# 新手,如果我使用的术语不正确,请纠正我。

这是课程:

public class Employee
    {
        public int Age;
        public string FirstName;
        public string LastName;
        
        public Employee(string firstName, string lastName, int age)
        {
            FirstName = firstName;
            LastName = lastName;
            Age = age;
        }
    }

在实例化对象时,我知道我可以将参数传递给构造函数。使用:

Employee myEmployee = new Employee("MyName", "MySurname", 30);

如果我注释掉类构造函数,我仍然可以设置属性。这种方式与另一种方式有区别吗?

Employee myEmployee = new Employee(){
                FirstName = "MyName",
                LastName = "Surname",
                Age = 32 
            };

我参加的所有培训都只展示了使用构造函数。我不确定某些情况是否需要使用一种方法而不是另一种方法,或者一种方法是否实际执行不同。

标签: c#classooppropertiesmember

解决方案


不,在编程上没有区别,但存在语义差异。

使用字段初始化的好处是您可以选择设置哪些字段并将其他字段保留为空。例如:

var employee = new Employee 
{
   FirstName = "Bob"
};

LastName现在nullAge现在0。在使用员工对象时,像这样保持未初始化的字段可能会导致问题。

在这种情况下,最好通过在类型末尾放置一个问号来将所有字段标记为 Nullable 属性。例如:

public int? Age { get; set; }

这将告诉编译器这些字段可能为空,因为您可能尚未初始化它们。如果您尝试直接取消引用它们而不首先检查它们是否为空,您将收到警告。

但是,如果您想确保每个Employee都有FirstName,LastNameAge, 您应该使用需要这些字段的构造函数。


推荐阅读