创建委托传递给派生类的构造函数中的基类构造函数
问题描述:
我有一个扩展BaseClass的类DerivedClass。 BaseClass的有一个构造函数的两名代表和字符串,它看起来像这样:创建委托传递给派生类的构造函数中的基类构造函数
public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToString)
{
...
}
在DerivedClass,我想有哪些调用基类的构造默认构造函数,传递的是一个简单的,“默认”工作代表方式,例如stringToBool总是返回false,或者stringToString总是返回传递给它的字符串。我怎样才能做到这一点?
答
class BaseClass
{
public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToStirng)
{
}
}
class DerivedClass : BaseClass
{
public DerivedClass() : base(s => true, s => s)
{
}
}
答
根据您所使用的短语“默认方式”的,我相信这是你真正想要的,那么:
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中到您的实例方法,因为类已经可以重写的方法,抽象方法,虚拟方法,等等。
做..你刚才说的。你在问语法吗? – Blorgbeard
我应该在DerivedClass中创建我想要的方法,然后在构造函数中传入这些方法?或者有没有办法在构造函数本身中创建函数? –
当然,我认为像'base(t => false,t => t)'这样简单的东西就可以工作。 – Blorgbeard