我有一个带有方法的API,在整个程序中我访问了该API的成员,就像:
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
现在我得到了一个使用不同方法和一些重叠的新API:
Class new_API
{
public method2{}
public method3{}
}
我的问题是我如何仍然保持单个api实例化但是实例化不同的api类?
API _api = new new_API() or new API();
仅供参考,这是我尝试拥有一个大类并通过将额外参数传递给类实例来隐藏非常用方法时所采用的新路径: How to hide functions within classes in c#?
先谢谢。
答案 0 :(得分:3)
如果两个API类都有共享继承链,则可以使用基类型(基类,抽象类或接口)作为变量类型。
您需要注入实际类型或使用工厂来检索它。
如果API类不具有共享祖先,请创建一个可以实现的接口。
答案 1 :(得分:1)
您应该创建一个包含这些方法的接口,并在两个类中实现它。
答案 2 :(得分:0)
除了每个人都说的,还有dynamic
个关键字,可让您以明确的类型不安全的方式调用对象。但那是在玩火。我不会这样做。
答案 3 :(得分:0)
bizzar方式是:
动态myapiobject = new new_API()或新API();
仅适用于.NET Framework 4.0
。
如果可以的话,从旧的那个中获取新的
public class new_API : API
希望这会有所帮助。
答案 4 :(得分: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{}
}