Создание конструктора по умолчанию для подкласса - PullRequest
5 голосов
/ 24 октября 2011

Я все еще изучаю C # и только что задал базовый вопрос о наследовании.

Допустим, у меня есть абстрактный класс SportsPlayer:

public abstract class SportsPlayer
{

    string name;    /*1ai*/
    int age;        /*1aii*/
    Sexs gender;    /*1aiii*/ 

    //1b
    public SportsPlayer(string n, int a, Sexs g)
    {
        this.name = n;
        this.age = a;
        this.gender = g;
    }
}

И подкласс под названием SoccerPlayer:

public class SoccerPlayer : SportsPlayer
    {
        Positions position;
        public SoccerPlayer(string n, int a, Sexs g, Positions p)
            : base(n, a, g)
        {
            this.position = p;
        }

        //Default constructor
        public SoccerPlayer()
        {

        }

Возможно ли создать конструктор на подклассе, которому не переданы аргументы, или я прав, полагая, что для создания конструктора по умолчанию на подклассе суперкласс должен иметьтоже конструктор по умолчанию?


Кроме того, если бы я добавил конструктор по умолчанию в суперкласс, как бы я инициализировал переменные суперкласса в конструкторе подкласса?В Java это super(), в C # это ??

public SoccerPlayer():base()
{
    base.name = "";
}

???

Ответы [ 3 ]

6 голосов
/ 24 октября 2011

Вы можете создать конструктор без параметров в производном классе, но ему все равно необходимо передать аргументы конструктору базового класса:

    //Default constructor
    public SoccerPlayer()
        : base("default name", 0, default(Sexs))
    {

    }

Или вы можете добавить конструктор по умолчанию в базовый класс ...

5 голосов
/ 24 октября 2011

вы можете иметь конструктор без параметров в дочернем классе, но вам нужно вызвать параметризованный конструктор базового или того же класса, например, так:

public Child():base(1,2,3)
{
}

или

public Child(): this(1,2,3)
{
}

В вашем случаеэто не имеет большого смысла, хотя.У футболиста не может быть имени или возраста по умолчанию.

2 голосов
/ 24 октября 2011

Вы можете создать свой новый конструктор, но если вы не вызовете base(...), то что-то в базовом классе не может быть инициализировано.
Поэтому вы должны использовать:

public SoccerPlayer()
    :base("name", 30, Sexs.???)
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...