gpt4 book ai didi

C# 类组织和列表

转载 作者:行者123 更新时间:2023-11-30 15:11:39 25 4
gpt4 key购买 nike

我正在开发一个 C# 应用程序,它由对象 Department、Course 和 Section 组成。每个部门有很多类(class),每个类(class)有很多部分。目前我有三个类(class):Department、Course 和 Section。 Department 包含一些属性,然后是一个 List Courses,其中包含该部门提供的类(class)。 Course 包含一些属性,然后是一个 List Sections,其中包含类(class)的各个部分。这是构建代码的好方法,还是我应该采用不同的方式?

其次,当我在我的应用程序中实例化一个部门时,我设置了一些属性,然后想开始将类(class)添加到部门类中定义的类(class)列表中。但是,我似乎无法简单地从应用程序中执行 Department.Courses.Add(Course) 。我必须在 Department 类中做什么才能在不破坏封装原则的情况下将对象添加到该列表?

我现在拥有的列表示例是:

class Department
{

// ......
List<Course> Courses = new List<Course>;
}

但是 Department.Courses 在类被实例化后在程序代码中不可用(类的所有其他属性都可用)。

最佳答案

在类的无参数构造函数中实例化内部类(class)列表。

private List<Course> _coursesList;

public Department()
{
_coursesList = new List<Course>();
}

此外,确保封装的另一种方法是在您的 Department 类上提供一种方法来向其中添加类(class),而不是直接公开类(class)列表。有点像

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 客户端公开一组类(class)(记住数组是只读的),这样您的 API 使用者将无法产生副作用在你的系课上。

public Course[] Courses {
get { return _coursesList.ToArray(); }
}

此外,您还可以在 Department 类上实现 IEnumerable 接口(interface)。它将使您能够利用 C# 3.0 中可用的所有 LINQ 扩展方法。

希望对你有帮助卡洛斯。

关于C# 类组织和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2184399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com