C#使用不同方法命名相同的类
本文关键字:方法 | 更新日期: 2023-09-27 18:21:36
我有一个带有方法的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();
仅供参考,这是我尝试只拥有一个大类并通过将额外的参数传递给类实例来隐藏非常用方法后所采取的新路径:如何在c#中隐藏类中的函数?
提前感谢。
如果两个API类都有共享继承链,则可以使用基类型(基类、抽象类或接口)作为变量类型。
您将需要注入实际类型或使用工厂来检索它。
如果API类没有共享祖先,请创建一个两者都可以实现的接口。
您应该创建一个包含方法的接口,并在两个类中实现它。
除了大家所说的,还有一个dynamic
关键字可以让您以显式类型不安全的方式调用对象。但这是在玩火。我不会这么做。
-
奇怪的方式是:
动态myapiobject=新的new_API()或新的API();
仅适用于
.NET Framework 4.0
。 -
从旧的中派生新的,如果你能的话
public class new_API : API
希望这能有所帮助。
选项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{}
}