2012-01-26 96 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{} 
} 
相关问题