获取一个对象并将其添加到appropitae集合中
本文关键字:appropitae 集合 添加 一个对象 获取 | 更新日期: 2023-09-27 18:21:15
我正在做一些实验,它让我创建了多个从基类继承的类。我创建了基类,一个从基类继承的学生类,它创建了一个学生,一个老师类,它从基类继承,它创建一个老师。现在我正在创建一个不继承任何类的学校类。我已经完成了它希望我做的大部分工作,但我一直在创建合适的方法,将对象添加到合适的类中。我需要关于如何创建这些方法的帮助和指导,以便我可以继续。我只是想发布我现在正在工作的学生班和说明。我不是在找人帮我做作业,我只是在网上找不到任何能指引我正确方向的东西。谢谢你的帮助。
方法
Add(base)-获取教师/学生对象并将其添加到适当的收集。
Print(base[])-采用基类对象的数组,并打印大堆
3打印(bool students=true)-打印学生列表或教师列表。这是通过与学生[]或老师[]基于布尔。
namespace BaseClass
{
class School
{
List<Teacher> staff = new List<Teacher>();
List<Student> students = new List<Student>();
public Student Students
{
get
{
students.Count();
return Students;
}
}
public Teacher Staff
{
get
{
if(Staff.EnumProp == Status.Employeed)
{
staff.Count();
}
return Staff;
}
}
public void Add(Teacher t1, Student s1) //not sure if this is correct or
//what to do in this method??
{
staff.Add(t1);
students.Add(s1);
//i also need help in the following methods. i am not sure what needs to be put
//in the parameter of the method, based on the instructions.
根据需求1,您必须Add(Base c)
并从中确定要添加到的集合。例如CCD_ 2。通常,这样的类将分别具有重载(Add(Teacher)
and Add(Student)
),以便能够直接添加。
public void Add(Base c)
{
if(c is Teacher)
staff.Add((Teacher)c);
else
students.Add((Student)c);
}
2取决于输出类型。将分配输出到控制台就足够了,所以你可以使用之类的东西
void Print(params Base[] peeps)
{
foreach(var c in peeps)
c.Print();
}
无论打印是如何实现的,步骤3实际上都非常容易。您可以按照要求调用您的Print(Base[])。要获得该数组,您必须确定要使用哪个集合,就像req中一样。1.(听起来确实需要两个单独的集合,否则在Base公开角色的情况下可以使用单个集合)。
public void Print(bool students = true)
{
if(students)
Print(this.students.ToArray());
else
Print(staff.ToArray());
}
PS,正如评论中提到的,学生和教职员工的财产似乎暴露了一些可以改变的行为,但由于这超出了问题的范围,除非你想让我们去,否则不会去那里;)
Add(base)-获取教师/学生对象并将其添加到适当的集合中。
对于添加,可以有两个名称相同但签名不同的方法。它们被称为方法重载。编译器可以通过查看它们的参数来区分它们。
这两种方法都是在基本方法中定义的。但更好的设计是将每个方法放在适当的类中。(即教师和学生班)
public void Add(Teacher teacher)
{
staff.Add(teacher);
}
public void Add(Student student)
{
students.Add(student);
}
Print(base[])-私有方法,它获取基类对象的数组并打印该数组的所有元素。
如果我理解正确,你想打印学生或老师的所有元素。仅此而已?
在基类中,可以有一个打印数组的私有方法。
private void Print(Base[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i].ToString());
}
}
最好重写Student和Teacher类的ToString方法。例如,这两个类都需要此方法。
public override string ToString() // write this method in both student and teacher classes.
{
return string.Format("Name : {0} , Age : {1}",studentName,studentAge ); // return optional information of student instance.
}
3打印(bool students=true)-根据参数值打印学生列表或教师列表的公共方法。这是通过根据布尔调用学生[]或教师[]的Print(base[])来完成的。
你只需要一张简单的支票。
public void Print(bool students = true)
{
if(students)
Print(Students.ToArray());
else
Print(Staff.ToArray());
}
只有当它在Print(base[])
后面的基类内部时,这才有效。否则,必须保护Print(base[])。
更好的设计是在子类中分别添加每个打印方法。
在你的既定方法中,你所做的一切都是无用的。
Count()
是一个计算列表长度的linq方法。您可以使用列表本身的属性。Count
(无括号),直接给出列表的长度。
而且你不会把结果存储在任何地方,所以这就是为什么我说它没用。您可能需要存储总计数。那么你就可以这么做了。
public int TotalCount
{
get { return staff.Count + students.Count; }
}