为什么没有设置就可以更改集合属性?

时间:2016-09-22 03:52:43

标签: c# language-design

Strings

最后,可以在属性声明中添加set集合,而不添加collection。为什么c#这样设计?如果@Override public void removeTeacherFromCourse(Course course, Teacher teacher) { teacher.getCourses().remove(course); updateTeacher(teacher); } 像普通属性一样工作会更容易理解,对吗?

2 个答案:

答案 0 :(得分:4)

它正常运行,您没有使用该操作设置属性。 List<>是一个对象,您所做的只是调用已分配给Strings属性的该对象的方法。

如果你这样做:

static void Main(string[] args)
{
    Customer myCustomer = new Customer();
    myCustomer.Strings = new List<string>();
}

你会发现它不会编译,因为它试图为没有setter的属性分配一个新值。

答案 1 :(得分:-1)

看看这行代码:

public List<string> Strings { get; } = new List<string>();

可能看起来这段代码表示属性Strings包含字符串列表。但事实并非如此,因为在C#中,变量不能包含对象。此代码表示属性Strings引用保存到字符串列表中。

向此列表添加元素时,不会更改Strings属性的值。您正在修改对象,但您没有修改引用。由于您没有更改Strings属性的值,因此您不需要setter。