ich OOP in C# lernen jedoch Schwierigkeiten, eine Mock-Anwendung entwerfen, die ein Universität Kartensystem simuliert die Schüler und Mitarbeiter bestimmte Dienste/Gebäude zugreifen kann.OOP-Schnittstellen und abstrakte Klassen
Ich habe eine abstrakte Klasse UniversityMember, die Informationen enthält, die für jeden Schüler commons wie jeder hat ein Vorname usw. Ich habe Schnittstellen, die spezifischer sind wie IStudent erzeugt studentIds und stellen Tür/Zugriffsebene ist Verwenden der enum AccessLevel-Klasse. Allerdings, wenn ich
public static void Main(string[] args)
{
Student Majid = new Student();
Majid.FName = "foo";
Majid.LName = "hello";
Majid.SetStudentId();
Majid.ExpiryDate = new DateTime(2018, 09, 10);
Majid.Type = MemberType.Student;
Majid.setStudentLevel(AccessLevel.CharlesWilson,
AccessLevel.ComputerScienceBuilding,
AccessLevel.DavidWilson);
PayTutionFees(Majid);
}
public static void PayTutionFees(IStudent student)
{
//Design problem
//student.ID etc
}
verwende ich Polymorphismus, weil jeder Schüler implementiert IStudent aber ich habe nicht den Zugang zu den Informationen für Studenten als in der abstrakten Klasse UniversityMember entfernt. Ich möchte nicht, dass die Schnittstellen mit wiederholten Methoden gefüllt werden, da es sich um gemeinsame Informationen zwischen Schülern und Lehrern handelt. Wie kann ich dieses Problem umgehen?
Ich sehe keine Klassen als 'Student', die' ISstudent' implementieren und ich nehme an, nur Studenten zahlen Gebühren. Vielleicht könnten Sie den Parametertyp für 'Student' ändern? – Michael
Okay, aber was, wenn ich eine Methode wollte, die nur GymMembers erlaubt, benutzen Schüler und Angestellte beide das Gym-Interface, wie würde ich das machen? – dijam
Ihr Parameter ist IStudent und es gibt keine ID-Eigenschaft auf IStudent. Also '(Student) student.ID' würde funktionieren. Oder 'Student als Student'. Um falsches Casting zu verhindern, können Sie mit 'if (student.GetType() == typeof (Student))' oder 'student is Student' nachsehen –