2017-10-07 88 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中到您的實例方法,因爲類已經可以重寫的方法,抽象方法,虛擬方法,等等。

相關問題