我有一个DerivedClass类,它扩展了BaseClass。 BaseClass有一个构造函数,它接受两个委托和字符串,如下所示:
public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToString)
{
...
}
在DerivedClass中,我希望有一个默认构造函数,它调用基本构造函数,传入以简单的“默认”方式工作的委托,例如: stringToBool始终返回false,或者stringToString始终返回传递给它的字符串。我怎么能做到这一点?
答案 0 :(得分:0)
class BaseClass
{
public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToStirng)
{
}
}
class DerivedClass : BaseClass
{
public DerivedClass() : base(s => true, s => s)
{
}
}
答案 1 :(得分:0)
根据您对“默认方式”这一短语的使用,我相信这是您真正想要的:
public class BaseClass {
public BaseClass(
Func<string, bool> stringToBool = null,
Func<string, string> stringToString = null
){
stringToBool = stringToBool ?? DefaultStringToBool;
stringToString = stringToString ?? DefaultStringToString;
}
private static bool DefaultStringToBool(string s) {
<Insert default logic here>;
}
private static string DefaultStringToString(string s) {
<Insert default logic here>;
}
}
然后你根本不需要触及构造函数基础的东西,除非你想覆盖那个默认逻辑。
但是,你真的不应该这样做,它会严格地与你的班级结合。
最好这样做:
public abstract class BaseClass {
protected virtual bool DefaultStringToBool(string s) {
<Insert default logic here>;
}
protected virtual string DefaultStringToString(string s) {
<Insert default logic here>;
}
}
public DerivedClass : BaseClass {
protected override string DefaultStringToString(string s) {
<Insert override logic here>;
}
}
如果要将Funcs传递给实例化方法,系统中存在设计缺陷,因为类已经可以使用可覆盖的方法,抽象方法,虚拟方法等。