Создание внутреннего списка курсов внутри конструктора без параметров вашего класса.
private List<Course> _coursesList;
public Department()
{
_coursesList = new List<Course>();
}
Кроме того, еще один способ обеспечить инкапсуляцию состоит в том, чтобы предоставить классу вашего факультета метод добавления курсов к нему вместо непосредственного отображения списка курсов. Что-то вроде
public void AddCourse(Course c) { ... }
// or (adding the feature of doing the method calls in a composable way)
public Course AddCourse(Course c) { ... }
// or
public void AddCource(String name, etc) { ... }
Я думаю, что в вашем случае не стоит напрямую выставлять List, потому что класс List может предоставлять такие методы, как Add и Remove, которые потенциально могут создать недопустимое состояние для вашего родительского класса. Поэтому, если вы решите предоставлять методы для управления внутренними коллекциями, как я предлагал, вы можете представить массив курсов своим клиентам API (помните, что массивы доступны только для чтения), чтобы ваши потребители API не могли создавать побочные эффекты. в классе вашего отдела.
public Course[] Courses {
get { return _coursesList.ToArray(); }
}
Кроме того, вы также можете реализовать интерфейс IEnumerable в своем классе Department. Это позволит вам использовать все методы расширения LINQ, доступные в C # 3.0.
Надеюсь, это поможет,
Карлос.