我創建了一個類InputBox
那只有一個方法,它是靜態的:
Public static Show(string i_Prompt)
在靜態方法創建一個模板方法
這種方法創建一個InputBoxForm並給出了形式的方法,該物業:public Predicate<char> isKeyValid { get; set; }
運行在這裏:
private void textBoxInput_KeyPress(object sender, KeyPressEventArgs e)
{
if (isKeyValid != null)
{
e.Handled = !isKeyValid(e.KeyChar);
}
}
的想法是,開發者將獲得我的類並創建他自己對如何處理從U獲得字符邏輯SER。
此實現靜態Show方法是:
public static string Show(string i_Prompt)
{
string input = string.Empty;
using (InputBoxForm form = new InputBoxForm(i_Prompt))
{
form.isKeyValid = s_Instance.keyValidationLogic;
if (form.ShowDialog() == DialogResult.OK)
{
input = form.Input;
}
}
return input;
}
模板是keyValidationLogic。 (對於基本InputBox中的所有鍵都返回true)
問題,因爲您可以看到我無法覆蓋靜態方法。
我將如何在靜態方法中實現模板方法?
我要創建的輸入框的一個實例,但我想用派生類的實例
類InputBox
也不是一成不變的。我希望它能派生出來,所以開發人員可以自定義輸入框的邏輯。
感謝
你說,你希望人們能夠覆蓋'InputBoxForm',或者重寫密鑰驗證邏輯? – JLRishe
重寫密鑰驗證邏輯。就好像你希望用戶只輸入數字一樣,你可以改變驗證來檢查字符是否是數字 –
我明白了。 'Show()'必須是靜態的,或者你可以讓人們在'InputBox()'的實例上調用'Show()'? – JLRishe