繁体   English   中英

对象作为没有工具的接口

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM