获取一个对象并将其添加到appropitae集合中

本文关键字:appropitae 集合 添加 一个对象 获取 | 更新日期: 2023-09-27 18:21:15

我正在做一些实验,它让我创建了多个从基类继承的类。我创建了基类,一个从基类继承的学生类,它创建了一个学生,一个老师类,它从基类继承,它创建一个老师。现在我正在创建一个不继承任何类的学校类。我已经完成了它希望我做的大部分工作,但我一直在创建合适的方法,将对象添加到合适的类中。我需要关于如何创建这些方法的帮助和指导,以便我可以继续。我只是想发布我现在正在工作的学生班和说明。我不是在找人帮我做作业,我只是在网上找不到任何能指引我正确方向的东西。谢谢你的帮助。

方法

  1. Add(base)-获取教师/学生对象并将其添加到适当的收集。

  2. 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. 

获取一个对象并将其添加到appropitae集合中

根据需求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; }
}