有人能帮我解决一个关于C#中接口的问题吗

本文关键字:接口 问题 一个 解决 | 更新日期: 2023-09-27 17:58:09

有人问我这样一个问题。

创建IPeople界面:教师和学生有很多共同点,但也有一些细微的差异。创建一个接口来公开它们之间的所有通信。您需要修改教师和学生部分类,以便它们实现此接口。

现在我不完全确定这是在告诉我该怎么做。教师由:TeacherId,FirstName,LasteName,DateOfBirth,AnnualSalary,DepartmentId组成,学生由:
StudentId,First Name,LastName,DateOfBirth,AverageScore,DepartmentId组成

那么我猜这个名字的通用性是FirstName、LastName、DateOfBirth和DepartmentId。此外,教师教授课程学生[/strong>参加课程。

现在,我认为我需要修改教师的部分类别和学生的部分类别,将CourseID添加到课程中,这样我也可以在两者之间创建链接,因为我需要在下一个问题中向课程中的所有人展示。我认为一个接口可以显示两个类的公共值,以创建一个列表,然后对其进行过滤。

所以我的问题是,到目前为止我做对了吗?我没有这种工作的经验。如果有人能为我指明创建界面的正确方向,那就太好了。任何编码或网站示例。

有人能帮我解决一个关于C#中接口的问题吗

这里的完整答案将占用大量空间。许多书的整章都专门讨论这样的主题。不过,总的来说,你走在了正确的轨道上。

你可能遇到的问题是,你对设计的思考太深了。那真的不是你的错。这个问题本身就令人不安,这表明提出这个问题的人可能也在错误的抽象层次上呈现材料。

这个问题对IPeople的选择不是一个好的开始(应该是IPerson),然后它继续要求你在详细的层面上进行OO设计,你应该从更高的层面来思考它。你应该考虑"学生和老师都是一种人",而不是"学生和教师都有一个名为LasteName的字段"。

让我给你举一个例子,说明这个问题过于抽象是如何产生问题的。按照提问的方式思考意味着你将创建一个IPerson接口来表示"一个人"的抽象概念。学生和老师都继承了这个IPerson。因此,你设计了一个包含学生和老师之间"所有共性"的界面(就像问题所说的那样),你就会得到StudentId、FirstName、LastName、DateOfBirth、AverageScore、DepartmentId(如您所示)。

在这种细节水平上,这是最好的。但考虑一下:以后你可能需要为学生的父母增加一个班级,这样你就有了第三种"人"。Parent有一个DepartmentId字段有意义吗?

如果像这个问题鼓励的那样,在太深的细节层次上思考设计,你可能(也会)最终会得到非常脆弱的设计,从更高的抽象层次来看,这些设计毫无意义。

要满足这一点,您所要做的就是创建带有您所标识的公共属性的接口,然后在分部类中让两个类实现接口,例如:

public partial class Student : IUniversityPerson{ ... }

其中IUniversityPerson是您创建的接口。链接课程等不在我读到的问题范围内。

您已经确定了教师和学生对象的公共属性/成员。除非问题指定添加,否则您不需要添加更多内容——只需为相交成员创建接口即可。你已经完成了50%,所以现在你只需要制作接口并标记每个类来实现它。

是的,你走在了正确的轨道上。。。这里的共同点是教师和学生都是人。因此,您可以创建一个IPerson接口和Person基类。然后,学生和教师都继承Person基类,并实现IPerson接口。

这种划分允许您将处理一般"人员"需求所需的代码分离为单独的模块。它还允许更容易的维护,因为只要需要更改常见的"人"属性,就只需要在一个地方进行更改。这些是面向对象编程的一些基本原则。