gpt4 book ai didi

c# - 有没有办法创建支持接口(interface)的 DynamicObject?

转载 作者:可可西里 更新时间:2023-11-01 08:23:31 29 4
gpt4 key购买 nike

我可以定义一个派生自 DynamicObject 并支持接口(interface) (ICanDoManyThings) 的类,而不必在接口(interface)中实现每个方法吗?

我正在尝试创建一个动态代理对象,并希望通过 MyProxyClass.TryInvokeMember 的实现来处理对此类的方法调用,这可能会也可能不会将它们传递给包装对象。

这可能吗?

谢谢

最佳答案

ImpromptuInterface正是这样做的,它适用于任何 IDynamicMetaObjectProvider,包括 DynamicObject 子类和 ExpandoObject。

using ImpromptuInterface;
using ImpromptuInterface.Dynamic;

public interface IMyInterface{

string Prop1 { get; }

long Prop2 { get; }

Guid Prop3 { get; }

bool Meth1(int x);
}

...

//Dynamic Expando object
dynamic tNew = Build<ExpandoObject>.NewObject(
Prop1: "Test",
Prop2: 42L,
Prop3: Guid.NewGuid(),
Meth1: Return<bool>.Arguments<int>(it => it > 5)
);

IMyInterface tActsLike = Impromptu.ActLike<IMyInterface>(tNew);

Linfu 实际上不会使用基于 DLR 的对象,而是使用它自己的天真后期绑定(bind),这给它带来了严重的性能成本。 Clay 确实使用了 dlr,但您必须坚持使用 Clay 对象,这些对象旨在将所有行为注入(inject)到 ClayObject 中,这并不总是那么简单。

关于c# - 有没有办法创建支持接口(interface)的 DynamicObject?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6712407/

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