我有一个基础classe和一个继承子类。
基类构造函数接受一个我不想从子构造函数传递的参数。
参数是通用List<MyInterface>
C#可以实现吗?
目前我的子类构造函数看起来像这样:
public ChildClass() : base (new List<MyInterface>());
有没有更好的方法,而不必新的列表?
答案 0 :(得分:4)
如果基类构造函数需要参数,则必须从Child类传递该参数。
您有两种选择。
protected
,因为这只能用于子类) 像:
public class BaseClass
{
public BaseClass() // or protected
{
//does nothing
}
}
然后将其称为:
public ChildClass() : base ();
或只是
public ChildClass() //Since base() would be called implicitly.
null
。 您还应该重温您的设计。基类中没有无参数构造函数意味着类对象需要特定参数才能工作。解决它是code smell。
答案 1 :(得分:1)
您可以在基类上添加无参数构造函数,为您创建新的List吗?除此之外,不,你必须这样做。
您将拥有两个构造函数,如下所示:
public BaseClass(List<MyInterface> newList)
{
//blah blah blah
}
public BaseClass()
{
var myList = new List<MyInterface>();
}
答案 2 :(得分:1)
您的基类必须
A) define a parameterless constructor so that you can invoke base()
或者
B) be ok with accepting a null value for the List<MyInterface> param
答案 3 :(得分:0)
就像每个人都说你要么在基类中需要一个无参数的构造函数,要么你需要传递参数。如果子类中根本不需要参数,则可能是代码气味。
如果您只希望您的子类可以访问无参数构造函数而没有其他人可以访问protected
。
public class BaseClass {
protected BaseClass() : this(new List<MyInterface>()) {
}
public BaseClass(List<MyInterface> newList)
{
//blah blah blah
}
}