Наследование метода в c#
Доброго всем времени суток.
Возник вопрос ,связанный с наследованием методов.
Есть 2 класса:
public class Student
{
protected private String Name { get; set; }
public Student(String Name)
{
this.Name = Name;
}
public void GetCourse(String Course)
{
Console.WriteLine(Course);
}
}
public class Worker : Student
{
protected private String Course { get; set; }
public Worker(String Name,String Course):base(Name)
{
this.Course = Course;
}
public void GetCourse()
{
Console.WriteLine(Course);
}
}
Возможно ли сделать у класса Worker наследование метода GetCourse(String Course) ,где вместо параметра String Course будет участвовать поле protected private String Course { get; set; } .А сам метод будет вызываться как :
Worker A = new Worker("Name","Course");
A.GetCourse();
Или же необходимо создать новый метод, как в описании второго класса?
Ответы (1 шт):
protected и private не совместимы, это разные модификаторы доступа, либо одно, либо другое. Все равно, что написать public private. И тип string с маленькой буквы, как и любой другой базовый тип!
A K прав, создание методов-пустышек могут позволить себе только abstract class(абстрактные классы), но никак не самостоятельные. А ситуация с GetCourse() решается просто, с помощью методов доступа поля, а не функцией.
public class Human {
// поле публичное, но присваивается только в классе Human (private)
// если указать protected вместо private можно было бы присваивать и в дорчерних классах, но в данном контексте это не имеет смысла
public string Name { get; private set; }
public DateTime BirthDate { get; private set; }
public int Age { get { return new DateTime(DateTime.Now.Subtract(BirthDate).Ticks).Year-1; } }
public Human (string name, DateTime birthDate) {
Name = name;
BirthDate = birthDate;
}
}
public class Student : Human {
public string EducationCourse { get; private set; }
public Student (string name, DateTime birthDate, string course) : base(name, birthDate) {
EducationCourse = course;
}
// делаем из человека, студента
public Student (Human human, string course) : this(human.Name, human.BirthDate, course) { }
}
public class Worker : Student {
public string Profession { get; private set; }
public Worker (string name, DateTime birthDate, string profession, string course = "") : base(name, birthDate, course) {
Profession = profession;
}
// делаем из человека, работника, у которого возможно нет образования
public Worker (Human human, string profession, string course = "") : this(human.Name, human.BirthDate, course, profession) { }
// делаем из студента, работника
public Worker (Student student, string profession) : this(student.Name, student.BirthDate, student.EducationCourse, profession) { }
}
Но то, что Human, Student и Worker разные классы это странно. Получается, что безработный не может иметь образования, а студент не может быть работником.