C#抽象类澄清

8 c#

由于抽象类无法初始化,为什么允许构造函数?

我想,Incase我需要将信息传递给基类(这个类中的抽象类),我需要有构造函数.我的意思是

     abstract class Person    
     {
        string regNo,name;

        public Person(string regNo,string name)
        {
            this.regNo = regNo;
            this.name = name;
        }

        public string RegNo
        {
            get { return regNo; }
        }

        public string Name
        {
            get { return name; }
        }

    }

    class student : Person
    {
        student(string regno, string name)
            : base(regno, name)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是构造函数在抽象类中被允许的目的吗?

mjv*_*mjv 18

虽然不能被实例化自身,抽象类可以有构造函数会被它的派生类的构造函数被调用.

这对于包含在基本身中的成员的初始化特别有用.(即当派生类的构造函数包含对"base()"的引用时).

事实上,正如Jason Down提醒我们的那样,如果未明确定义这样的构造函数,则类总是提供无参数的默认构造函数.

  • 不要忘记,即使是抽象类,如果你自己不创建一个抽象类,也会自动为它生成一个无参数构造函数. (2认同)