#c#
Вопрос:
У меня есть абстрактный класс, который наследуется. Класс, который наследуется от абстрактного класса, должен иметь расширенный конструктор.
Я не могу найти то, что ищу в Интернете, потому что не знаю, как это сказать.
Мой код выглядит так:
Мой абстрактный класс животных
public abstract class Animal : PictureBox
{
public string name { get; }
public int age { get; }
public bool gender { get; }
public Image img { get;}
protected Animal(string name, int age, bool gender)
{
this.name = name;
this.age = age;
this.gender = gender;
}
public virtual void SayYourName()
{
Debug.WriteLine("My age is:", name);
}
public virtual void SayYourAge()
{
Debug.WriteLine("My age is:", age);
}
public virtual void SayYourGender()
{
if (gender == true)
{
Debug.WriteLine("My gender is Male");
}
else
{
Debug.WriteLine("My gender is Female");
}
}
public virtual void eat()
{
Debug.WriteLine("I ate!");
}
Мой абстрактный класс амфибий
{
public abstract class Amphibian : Animal, ISwim, IWalk
{
public void swim()
{
Debug.WriteLine("I swam!");
}
public void walk()
{
Debug.WriteLine("I walked!");
}
}
Мой абстрактный класс лягушки
public abstract class Frog : Amphibian
{
}
Мой класс африканской лягушки
public sealed class African_bullfrog : Frog
{
public African_bullfrog(string name, int age, bool gender)
: base(name, age, gender)
{
this.img = Zoo.Properties.Resources._01__African_Bullfrog;
}
Моя проблема возникает в последнем разделе кода
Комментарии:
1. Какая проблема возникает в последнем разделе кода?
2. Конструкторы не наследуются.
Frog
у конструктора нет 3 аргументов, и Amphibian не может вызвать конструктор базового класса, который это делает. Ваши промежуточные классы должны определять конструкторы для передачи ваших параметров вверх по иерархии.
Ответ №1:
Все ваши классы, которые наследуются от Animal
, должны предоставлять Animal
необходимую информацию, поэтому вы должны предоставить конструктор, который принимает эти сведения и передает их base
конструктору.
public abstract class Amphibian : Animal, ISwim, IWalk
{
public Amphibian(string name, int age, bool gender):base(name, age, gender)
{
}
// ...
}
public abstract class Frog : Amphibian
{
public Frog(string name, int age, bool gender):base(name, age, gender)
{
}
}
public sealed class African_bullfrog : Frog
{
public African_bullfrog(string name, int age, bool gender)
: base(name, age, gender)
{
// ...
}
}