构造函数和继承
左直拳
有同事用到了泛型,却编译通不过:
public class Class1<T,S>
{
public Class1(T t,S s){}
}
public class Class2<T, S> : Class1<T, S>
{
}
以为是泛型的原因。问到我,我也是支支吾吾,闪烁其词,一会儿说继承的基类不用再写泛型变量,一会儿又说可能是构造函数用了泛型。试了一下,才知道根本不关泛型的事,是构造函数的原因。
因为基类Class1只有一个构造函数,并且这个构造函数带了两个参数,造成继承出了问题。估计是继承时默认调用基类没有参数的构造函数。因此,在基类里加一个无参数的构造函数,编译通过:
public class Class1<T,S>
{
public Class1(T t,S s){}
public Class1(){}
}
也可以在子类Class2中创建一个带参数的构造函数,并调用基类初始化。
public class Class2<T, S> : Class1<T, S>
{
public Class2(T t, S s) : base(t, s) {}
}
两种方法都可以。