- 如果在类中定义了有参的构造函数,编译器就不会再生成无参的构造函数。此时若需要调用无参构造函数,需要在类中定义,否则编译器会报错
- :base 默认调用的是基类的构造函数,要保证其参数与基类构造函数一致。 默认情况下,派生类new 一个对象时,先去调用基类构造函数。
- 编译器将首先基类的构造函数,再调用派生类的构造函数。,如果基类没有显示的构造函数,则调用其默认的无参构造函数。
测试代码:
using System;
namespace baseTest21
{
class Program
{
static void Main(string[] args)
{
//string str = DateTime.Now.AddDays(-1 * count).ToString("yyyy-MM-dd");
Student st = new Student();
DateTime birthdate = new DateTime(2003, 5, 28);
Student st2 = new Student("lily",birthdate);
goodStudent goodst = new goodStudent();
goodStudent goodst2 = new goodStudent("harfla");
goodStudent goodst3 = new goodStudent("david",new DateTime(1990,6,18) ,"Tqing");
Console.ReadLine();
}
}
public class Student
{
protected int Age;
public string Name;
public DateTime birthDate;
public int GetAge()
{
int ts = DateTime.Now.Year - birthDate.Year;
return ts;
}
public Student()
{
Console.WriteLine("默认的构造函数");
}
public Student(string name, DateTime birthDt)
{
this.Name = name;
this.birthDate = birthDt;
Console.WriteLine("带参数构造函数");
Console.WriteLine("name:{0}--birthdate:{1}",Name,birthDate.ToString("yyyy-MM-dd"));
}
}
public class goodStudent : Student
{
public int Score;
public string University;
public goodStudent() : base()
{ }
public goodStudent(string name, DateTime birthDat,string school) : base(name,birthDat)
{
this.Age = DateTime.Now.Year - birthDate.Year;
this.University = school;
Console.WriteLine("name:{0}--birth:{1}--age:{2}",Name,birthDate.ToString("yyyy-MM-dd"),Age);
Console.WriteLine("university--{0}",University);
}
public goodStudent(string uv):base()
{
this.University = uv;
Console.WriteLine("unviersity:{0}", uv);
}
}
}
运行后输出