Создайте конструктор для класса, который наследуется от абстрактного класса

#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)
    {
        // ...
    }
}