对象作为没有实现的接口
本文关键字:实现 接口 对象 | 更新日期: 2023-09-27 18:09:46
我遇到了一个奇怪的情况,我的一个方法必须接收一个对象或一个动态参数(因为它将接收任何东西),但我确实关心那个类实现至少两个方法。
显然,只使用和接口,所有想要在我的方法上接收的对象都必须实现,这将是伟大的;很遗憾,我不能保证……
我在我的类中使用了很多对象(和这两个函数),并且想要引用具有"IImplementsBothMethods"类型"的该对象,因此我可以在被强制转换后使用它,知道它不会中断。
我想要的是这样的:
public interface IImplementsBothMethods
{
Method1();
Method2();
}
public class ClassThatReceivesAnything
{
IImplementsBothMethods obj;
public ClassThatReceivesAnything([dynamic|object] unknownObject)
{
// unknownObject does not implement the interface
obj = unknownObject as IImplementsBothMethods;
}
public void MethodThatDoesNotCare()
{
obj.Method1();
obj.Method2();
}
}
我怎样才能做到这一点?强制转换只返回null
谢谢
如果你不能要求传入对象实现一个接口,你就不能有直接引用的强类型代码(这是有意义的,因为你似乎试图实现鸭子类型)。
您可以创建强类型包装器,以保护其余代码不受强制类型转换的影响。包装器既可以只依赖于dynamic
/反射,也可以使用一些更复杂的代码,比如用表达式树构造每个传入类型的唯一实例。
class WrapperToImplementBoth : IImplementsBothMethods
{
private dynamic inner;
public WrapperToImplementBoth(dynamic v)
{
inner = v;
}
// let dynamic handle calls, consider catching/logging exceptions
public void Method1() {inner.Method1()};
public void Method2() {inner.Method2()};
}