在子类上创建默认构造函数

OVE*_*ONE 5 c# inheritance constructor

我还在学习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;
    }
}
Run Code Online (Sandbox Code Playgroud)

一个子类叫做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()
        {

        }
Run Code Online (Sandbox Code Playgroud)

是否有可能在子类上创建一个没有参数传递的构造函数,或者我是否认为为了在子类上创建默认构造函数,超类必须也有一个默认构造函数?


另外,如果我要向超类添加默认构造函数,我如何在子类构造函数中初始化超类变量?在java中super(),在C#中它是??

public SoccerPlayer():base()
{
    base.name = "";
}
Run Code Online (Sandbox Code Playgroud)

???

Tho*_*que 6

您可以在派生类上创建无参数构造函数,但仍需要将参数传递给基类构造函数:

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

    }
Run Code Online (Sandbox Code Playgroud)

或者您可以向基类添加默认构造函数...


Muh*_*han 5

你可以在子类中使用一个参数less constructor,但是你需要像这样调用base或同一个类的参数化构造函数

public Child():base(1,2,3)
{
}
Run Code Online (Sandbox Code Playgroud)

要么

public Child(): this(1,2,3)
{
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它没有多大意义.足球运动员不能拥有默认名称或年龄.