2015-11-13 68 views
0

我試圖想到用不同字段在兩個對象之間創建通用接口的最佳解決方案。具有不同字段的對象之間的通用接口

Interface Base { 

    void dosomething(); 
} 

Class A : Base { 
    string x; 
    string y; 
    void dosomething(); 
} 

Class B : Base { 
    string a; 
    string b; 
    string c; 
    void dosomething(); 
} 

問題是當我創建一個基礎對象時,我仍想訪問這些字段。我想到的解決方案是使用「as」命令來鍵入cast。有沒有更優雅的解決方案?

+0

現在還不清楚你真的想在這裏實現什麼。我們不知道創建對象的代碼是什麼,或者代碼使用什麼對象。這是目前的XY問題...... –

+0

我基本上有另一個函數,它需要一個基礎對象。有幾個派生類的基地。如果Base是B類型的,我想訪問它的字段a,b,c。我想到的唯一的另一個解決方案是創建一個字典來存儲字段,但看起來並不乾淨。 – user3750474

+2

這聽起來像是一個設計問題,與其他任何東西一樣 - 對於需要Base方法需要了解具體子類的方法而言,這是相當難看的。 –

回答

-1

你能做到這一點,

或者你可以與所有五個屬性X實現基地的中間階層,Y,A,B和C定義的虛擬和返回空值(比方說和Base2)和和Base2派生類並且只覆蓋A和A,a,b和c的B和B。

+0

謝謝。那正是我在想的。你認爲哪個更清潔?我有5個基地的實施,所以這將是20個左右的領域。 – user3750474

+0

如果這些對象的屬性是不同的,那麼他們可能有不同的責任,並且對它們都有一個基類並不是一個優雅的設計,如果你只有一個類「做某事」的抽象,那麼你應該堅持抽象。爲什麼你需要在同一個地方訪問派生類的屬性是另一個問題。 –