[英]Creating delegates to pass to base class constructor in constructor of derived class
我有一個繼承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傳遞給實例化方法,則系統中存在設計缺陷,因為類已經可以具有可重寫的方法,抽象方法,虛擬方法等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.