2012-03-28 59 views
0

我在宣佈像這樣一個基類的抽象方法的...空軍一號兩個方法的實現在子類

public abstract void StartHere(); 
public virtual void StartHere(string flag) 
{ 
    switch(flag) 
    { 
     default : StartHere(); break; 
    } 
} 

有沒有辦法改變它,以便繼承的子類是被迫實施一個或另一個,但不是兩個?目前,子類僅被強制執行StartHere()。

而且你會說的很好的做法,默認的虛擬方法點回參數的抽象?或者這是毫無意義的?

該方法的功能是設置類,程序員可以使用做StartHere()進行簡單的設置或更復雜的一個採取在一個標誌StartHere(字符串)。

謝謝!

+0

你給客戶端程序員太多的繩子上吊。堅定地執行程序,負責你應該照顧的部分,不要把它留給其他人去弄清楚。使StartHere(字符串)爲私人。 – 2012-03-28 11:19:28

回答

3

一般情況下,這將是明智的參數,功能較少通過將默認值調用巴拉計量功能。這被稱爲函數鏈。

+0

所以你說startHere()應該調用startHere(「default」)...但是它不能抽象的正確。我希望這種方法是抽象的,以強制其實施。 – user1229895 2012-03-28 10:46:43

+0

是的。您可以使用抽象參數的最大數量來保留startHere。或揭露這將設置這將作爲輸入參數類的屬性,方法和讓startHere使用這些屬性/屬性 – Ramesh 2012-03-28 10:56:58

+0

我仍然不知道我的理解如何強制的兩個抽象方法之一,但我相反的順序用另一種類似的方法調用我的。謝謝! – user1229895 2012-03-28 11:42:59

1

我喜歡不同的設計,喜歡的東西:

public void StartHere(); 
public virtual void StartHere(string flag) 
{ 
    StartHere(); 
} 

因爲在這種情況下,父類和子類是更加鬆耦合:父類不必一無所知。關於* 標誌 * S只有子類有興趣

如果非要按照你因爲某些原因當前的設計,我建議你至少更改以下行:

switch(flag) 
    { 
     default : StartHere(); break; 
    } 

喜歡的東西:

switch(flag) 
    { 
     "DEFAULTFLAG" : StartHere(); break; 
     default : throw ArgumentException(
      String.Format("Unrecognized flag '{0}'!", flag) 
      ); 
    } 

它很容易讓你趕上意外的錯誤,如果錯誤地設置錯誤標誌。

+0

感謝您的建議,我更新了我的開關。並且可以考慮一起去除它。 – user1229895 2012-03-28 11:41:46

相關問題