gpt4 book ai didi

c# - 自动创建一个包装器来实现一个接口(interface)

转载 作者:可可西里 更新时间:2023-11-01 03:08:48 25 4
gpt4 key购买 nike

我有一些实现特定接口(interface)但在结构上符合该接口(interface)的类。

interface IFoo {
void method();
}

class Bar { // does not implement IFoo
public void method() {...}
}

现在,我可以围绕那些简单地委托(delegate)给包装类的类编写一个包装器

class BarWrapper : IFoo {
Bar bar = new Bar();
public void method()
{
bar.method();
}
}

但这是一项繁琐的工作。这些包装类可以以某种方式自动生成吗?像这样的东西:

IFoo foo = CreateWrapper<IFoo>(new Bar());

我确定您可以使用 Reflection.Emit 做到这一点,但我从未使用过它,乍一看它看起来并不容易。

有没有更简单的方法或者是否有一个库已经实现了这个?

最佳答案

您要完成的任务称为鸭式输入。有一些专门的库可以让你这样做,尽管我没有使用过它们中的任何一个。

只需很少的努力(和一些思考),您就可以使用 CaSTLe Dynamic Proxy 来做到这一点,使用概述的方法 here .

如果出于某种原因,基于拦截器的方法对您来说 Not Acceptable 动态代理不支持开箱即用的方法(目前),但如果您使用 2.2 beta 版,则可以很容易地以强大的方式提供该方法类型化的方式(不使用拦截器),通过提供您自己的代理类型构建器(看看 mixin 是如何实现的)。

关于c# - 自动创建一个包装器来实现一个接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com