zoukankan      html  css  js  c++  java
  • Unity的AdditionalInterfaces问题

    在研究Unity的AdditionalInterfaces时候产生一个疑问,假设现有类型的函数名称和一个接口的函数名称相同,通过附加接口后创建的代理类型规范了这一组操作。下面是模拟的定义和调用:

     1 public class MyObject4
     2 {
     3   public virtual void DoWork()
     4   {
     5 
     6   }
     7 }
     8 
     9 public class MyObject5 : MyObject4, IWorkProvider
    10 {
    11   public override void DoWork()
    12   {
    13     base.DoWork();
    14   }
    15 }
    16 
    17 IWorkProvider workProvider = new MyObject5();
    18 
    19 workProvider.DoWork();

    现在通过Intercept的NewInstanceWithAdditionalInterfaces函数为MyObject4的派生代理类型添加IWorkProvider接口。代码如下:

     1 Object myObject = Intercept.NewInstanceWithAdditionalInterfaces(
     2   typeof(MyObject4),
     3   new VirtualMethodInterceptor(),
     4   new[] { new MyInterceptionBehavior() },
     5   new[] { typeof(IWorkProvider) }
     6 );
     7 
     8 IWorkProvider workHost = (IWorkProvider)myObject;
     9 
    10 workHost.DoWork();

    调用DoWork时抛出NotImplementedException,Additional interfaces do not have an implementation。也就是说Unity为一个类型附加接口的时候使用的是显示实现而不是隐式实现,同时也没有判断当前类型中是否已经存在了相同声明的隐式实现。

     1 public class MyObject5 : MyObject4, IWorkProvider
     2 {
     3   public override void DoWork()
     4   {
     5     base.DoWork();
     6   }
     7 
     8   #region IWorkProvider Members
     9 
    10   void IWorkProvider.DoWork()
    11   {
    12     throw new NotImplementedException();
    13   }
    14 
    15   #endregion
    16 }
  • 相关阅读:
    23.safari history.back的一个坑
    22.一个小小的广播效果
    UI13-GET POST 同步,异步-代理 Block请求方式。
    UI11-数据解析:Json DOM SAX 解析
    UI10-通讯录
    UI-09 cell 高度自适应)
    UI06-scrollView 滚动视图 pagecontroll 页面控制
    UI05-‍手势用图片做实验
    UI04-NSTimer 打地鼠
    UI03-viewController 视图跳转:
  • 原文地址:https://www.cnblogs.com/junchu25/p/2631591.html
Copyright © 2011-2022 走看看