事出有因:今天看项目代码碰到了C# 关键字 where ,我起先想到的是跟数据库的sql语句一样的where。我搜了资料后发现该关键字和泛型约束有关,于是我又继续学习关于泛型约束的知识,然后看到关于泛型类继承的问题。
于是自己就code了一些代码:
class Human
{
//public Human()
//{
//Console.WriteLine("this is from HHHHHhuman constructor!");
//}
public Human(int i,int j)
{
Console.WriteLine("HHHHHHHan constructor222222");
}
}
class Man : Human
{
public Man()
{
Console.WriteLine("this is from MMMMMMMMan constructor!");
}
}
这样的代码是会报错的:Base class ‘DelegateTest.Human’ doesn’t contain parameterless constructor
报错:Human类没有无参构造函数
这让我想到,为什么声明和实例的是Man,反而基类会报错,我又搜了一下发现,原来在派生类被初始化时,如果没有指定运行基类哪一个构造函数,则会默认运行的是基类的无参构造函数。大概就是实例化派生类的时候会先运行基类的构造函数再运行到自己的构造函数。
注意:基类如果没有写无参构造函数,反而写了有参的构造函数,此时如果派生类写无参构造函数则会报错。
下面是派生到孙子类的test code
class Human
{
public Human()
{
Console.WriteLine("this is from HHHHHhuman constructor!");
}
public Human(int i,int j)
{
Console.WriteLine("HHHHHHHan constructor222222");
}
}
class Man : Human
{
public Man(int i,int j):base(i, j)
{
Console.WriteLine("this is from MMMMMMMMan constructor!");
}
}
class boy : Man
{
public static int i;
public static int j;
public boy() : base(i, j)
{
Console.WriteLine("this is from CCCCCChild constructor!");
}
}