2012-01-26 174 views
2

我有一個API與方法,並在整個程序中,我訪問的API的成員只是想:C#同名類有不同的方法

Class API 
{ 
    public method1{} 
    public method3{} 
} 
API _api = new API(); // Inside constructor 
_api.method1(); // I have accessed the api like this in so many places within my GUI 

現在我買了不同的方法和一些overlaping一個新的API:

Class new_API 
{ 
    public method2{} 
    public method3{} 
} 

我的問題是我該如何保持一個API實例化,但實例化不同的API類?

API _api = new new_API() or new API(); 

僅供參考,這是我想只是有一個很大的類,並通過將額外的參數對類instatiation隱藏不常用的方法服用後的新路徑:提前 How to hide functions within classes in c#?

謝謝。

+1

通過閱讀PR這個問題你已經聯繫起來了,它幾乎聽起來像你根本不想要任何繼承關係。你談論的代碼路徑能夠確定要創建哪個對象以及調用哪些方法。這似乎決定了它們應該是不同的,具體的類型。 –

+0

這是完全正確的。這裏的主要問題是,只有一個具有兩個不同APIS且具有位相似性的單一實例化。 – Vikyboss

回答

1

您應該創建一個包含方法的接口並在兩個類中實現它。

3

如果兩個API類都有一個共享繼承鏈,那麼可以使用基類型(基類,抽象類或接口)作爲變量類型。

您將需要注入實際的類型或使用工廠來檢索它。

如果API類不是有一個共享祖先,創建一個接口,這兩個接口都可以實現。

0

除了每個人都說的外,還有dynamic關鍵字,可讓您以明確的類型 - 不安全的方式調用對象。但那是在玩火。我不會這樣做。

0
  • 的bizzar方式是:

    動態myapiobject =新new_API()或新的API();

    只可用於.NET Framework 4.0

  • 派生從舊的新的,如果你能

    public class new_API : API

希望這會有所幫助。

0

選項1:接口

Class API : IAPI 
{ 
    public method1{} 
    public method3{} 
} 

Class new_API : IAPI 
{ 
    public method2{} 
    public method3{} 
} 

interface IAPI{ 
    void method3{} //just the shared items 
} 

方法2:後期綁定

dynamic _api = new new_API() or new API(); 

方法3:繼承

Class API : APIBase 
{ 
    public method1{} 
    public override method3{} 
} 

Class new_API : APIBase 
{ 
    public method2{} 
    public override method3{} 
} 

abstract class APIBase{ 
    abstract method3{} 
} 
相關問題