2017-10-07 101 views
0

我有一个扩展BaseClass的类DerivedClass。 BaseClass的有一个构造函数的两名代表和字符串,它看起来像这样:创建委托传递给派生类的构造函数中的基类构造函数

public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToString) 
{ 
    ... 
} 

在DerivedClass,我想有哪些调用基类的构造默认构造函数,传递的是一个简单的,“默认”工作代表方式,例如stringToBool总是返回false,或者stringToString总是返回传递给它的字符串。我怎样才能做到这一点?

+0

做..你刚才说的。你在问语法吗? – Blorgbeard

+0

我应该在DerivedClass中创建我想要的方法,然后在构造函数中传入这些方法?或者有没有办法在构造函数本身中创建函数? –

+0

当然,我认为像'base(t => false,t => t)'这样简单的东西就可以工作。 – Blorgbeard

回答

0
class BaseClass 
{ 
    public BaseClass(Func<string, bool> stringToBool, Func<string, string> stringToStirng) 
    { 

    } 
} 


class DerivedClass : BaseClass 
{ 
    public DerivedClass() : base(s => true, s => s) 
    { 

    } 
} 
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中到您的实例方法,因为类已经可以重写的方法,抽象方法,虚拟方法,等等。

相关问题