Оператор преобразования наследника в предка - C#
Формулировка задачи:
Всем доброго времени суток! Нужна помощь в решении проблемы. Как можно все-таки хоть каким-нибудь способом привести Human к Creator?
class Creature // private default
{
// общие признаки живого существа
protected string name = "unknown species";
protected string sex;
public Creature(string name, string sex)
{
this.name = name;
this.sex = sex;
}
public Creature()
{
name = "Unknown";
sex = "Unknown";
}
public void PrintCreature()
{
Console.WriteLine("Name: " + name + "\nSex: " + sex);
}
// запрещает и явное и неявное преобразование в предка
public static explicit operator Creature(Human human)
{
return new Creature(human.name, human.sex);
}
}
class Human:Creature
{
private string name = "Human"; // скрыли поле предка
private sex = "male";
public Human() {}
public Human(string sex)
{
this.sex = sex;
}
}Решение задачи: «Оператор преобразования наследника в предка»
textual
Листинг программы
class Creature // private default
{
// общие признаки живого существа
protected string name = "unknown species";
protected string sex;
public Creature(string name, string sex)
{
this.name = name;
this.sex = sex;
}
public Creature()
{
name = "Unknown";
sex = "Unknown";
}
public void PrintCreature()
{
Console.WriteLine("Name: " + name + "\nSex: " + sex);
}
// КАК ПРАВИЛЬНО ВЫПОЛНИТЬ ПЕРЕГРУЗКУ ЭТОГО ОПЕРАТОРА?
public static Creature operator + (Human human, Bird bird)
{
// допустим сделаем новое имя, составленное из половинок передаваемых human и bird и случайно выберем один из полов
return new Creature(new_name, new_sex);
}
}
class Human:Creature
{
private string name = "Human"; // скрыли поле предка
private sex = "male";
public Human() {}
public Human(string sex)
{
this.sex = sex;
}
}
class Bird:Creature
{
private string name = "Bird";
private sex = "male";
public Bird(){}
public Bird(string sex)
{
this.sex = sex;
}
}