我正在做一些实验,它让我创建了多个继承自基类的类。我创建了基类,一个继承自基类的学生类,它创建了一个继承自基类的学生和教师类,从而创建了一个教师。现在我正在创建一个不继承任何类的学校类。我完成了大部分想要我做的事情,但我仍然坚持创建适当的方法来将对象添加到适当的类中。我需要有关如何创建这些方法的帮助和指导,以便我可以继续。我刚刚发布我正在工作的学生班和说明书。我不是在寻找有人为我做功课,我似乎无法在网上找到任何可以指导我正确方向的东西。谢谢您的帮助。
方法
添加(基础) - 获取教师/学生对象并将其添加到 适当的收藏。
- 醇>
Print(base []) - 采用的私有方法 基类对象的数组并打印出的所有元素 阵列。
3打印(bool students = true) - 打印输出的公共方法 学生列表或基于参数值的教师列表。 这是通过使用学生[]或调用Print(base [])来完成的 老师[]基于布尔。
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.
答案 0 :(得分:2)
根据要求1,您必须Add(Base c)
并确定要从中添加的集合。例如(c is Teacher ? staff : students).Add(c)
。通常这样的类会分别重载(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();
}
无论Print如何实施,步骤3实际上都非常简单。您可以按照要求中的说明调用Print(Base [])。要获取该数组,您必须确定要使用的集合,就像在req中一样。 1.(听起来确实需要2个单独的集合,否则可以在Base暴露人的角色的情况下使用单个集合。)
public void Print(bool students = true)
{
if(students)
Print(this.students.ToArray());
else
Print(staff.ToArray());
}
PS,正如评论中所提到的,学生和工作人员的财产似乎暴露了一些可以改变的行为,但由于这超出了问题的范围,除非你想要我们,否则不会去那里;)
答案 1 :(得分:1)
添加(基础) - 获取教师/学生对象并将其添加到相应的集合中。
对于添加,您可以使用两个名称相同但签名不同的方法。它们被称为方法重载。编译器可以通过查看它们所采用的参数来区分它们。
这些方法都是在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 Print(bool students = true) - 根据参数值打印出学生列表或教师列表的公共方法。这是通过使用学生[]或教师[]根据布尔调用Print(base [])来完成的。
你只需要一个简单的检查。
public void Print(bool students = true)
{
if(students)
Print(Students.ToArray());
else
Print(Staff.ToArray());
}
仅当其内部基类位于Print(base[])
后面时才有效。否则必须保护Print(base [])。
更好的设计是分别在子类中添加每个print方法。
在你的get and set方法中,你正在做的事情真的没用。
Count()
是一个linq方法,可以计算并给出列表的长度。你可以使用列表本身的属性。 Count
(不带括号)直接给出列表的长度。
此外,你不会把结果存储在任何地方,所以这就是为什么我说它没用。您可能希望存储总计数。然后你可以做到这一点。
public int TotalCount
{
get { return staff.Count + students.Count; }
}