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 }
标签:
Microsoft Unity
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?