2012-08-04 93 views
0

我有兩種兩種類型的基類:覆蓋基類抽象方法並將它們隱藏在派生類中

public abstract class Base 
{ 
    public abstract object Work(); 
} 

public abstract class AuthenticatedBase : Base 
{ 
    public abstract object Work(T request); 
} 

驗證過的類會做一些額外的工作來事先檢查登錄。然後我有兩個基類擴展的不同類;

public class A : Base 
{ 
    public override object Work() 
    { 
     // Work here 
    } 
} 

public class B : AuthenticatedBase 
{ 
    public override object Work(T request) 
    { 
     // Work here 
    } 
} 

基本上,當我創建一個新的B類,從AuthenticatedBase派生,Visual Studio中說,我需要實現從基類工作(),即使我有AuthenticatedBase的替代實現,我重寫,誠然具有不同的參數。我應該怎麼做,以便我不必從繼承類中的基類實現Work()方法?

+0

如果在'AuthenticatedBase'的子類中實現'Work()'沒有意義,那麼你的層次結構需要改變。 – Lee 2012-08-04 14:06:13

回答

0

你必須執行它,沒有辦法繞過它。這種情況下多重繼承會派上用場。

您可以使用組合,以便BA有參考。然後B.Work()可以撥打A.Work()

或者,執行B.Work(),以便它調用B.Work(T)。甚至有Base.Work()是一個虛擬方法,其基本實現從A

1

在AuthenticatedBase中實現無參數的Work方法,並使用「sealed」關鍵字來阻止它在AuthenticatedBase的繼承者上顯示。

相關問題