假設我有一個基類A,其子類爲B,C和D.我有一個類MyClass,它包含每個類的重載。我希望有一個計數器可以在任何時候增加這些方法之一,而不是在MyClass內部的任何地方調用。這可以通過幾個簡單的輔助方法來完成:C#避免重複邏輯
public class MyClass
{
int counter;
public doSomethingExternal(B b) {counter++; doSomething(b);}
public doSomethingExternal(C c) {counter++; doSomething(c);}
public doSomethingExternal(D d) {counter++; doSomething(d);}
private doSomething(B b) {...}
private doSomething(C c) {...}
private doSomething(D d) {...}
}
這真的會影響到我的開發。有沒有辦法更好的方式來編寫這些幫助器方法,以便我們對每個子類都沒有重複的邏輯?我設想的解決方案是這樣的:
// Magically, we know which type we are and call the correct doSomething
public doSomethingExternal(A a) {counter++; doSomething(a);}
我覺得這種泛化可以用反射來實現,但我聽說反射一般是緩慢的,可能是複雜的理解。我很好奇,如果有一個更傳統的模式,我忽略瞭解決這個邏輯重複問題。
也許[模板方法模式](https://www.tutorialspoint.com/design_pattern/template_pattern.htm)會幫助你。 – ckruczek
如果'A','B'和'C'共享一些共同的東西,比如一個接口,將會很有幫助。 – ja72
我認爲'C#'7.0有模式匹配,可以幫助您選擇正確的方法來調用。 – ja72