[英]Object as Interface without implements
我处于一种奇怪的情况下,其中我的方法之一必须接收对象或动态参数(因为它将接收任何东西),但是我确实关心该类至少实现两个方法。
显然,只需使用和接口所有必须在我的方法上接收的对象都必须实现即可。 可悲的是,我不能保证...
我在类中使用了很多该对象(以及这两个函数),并且希望引用该对象的“类型”为“ 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
/ reflection,也可以使用一些更复杂的代码,例如对于使用表达式树构造的每种传入类型都具有唯一实例。
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()};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.