sách gpt4 ai đã đi

c# - 如何在运行时定义委托(delegate)类型(即动态委托(delegate)类型)

In lại 作者:行者123 更新时间:2023-11-30 17:20:45 37 4
mua khóa gpt4 Nike

为了即时创建委托(delegate),技术从 Delegate.CreateDelegate 到 Expresion Lambda、DynamicMethod 等等各不相同。所有这些技术都要求您知道委托(delegate)的类型。 p>

我正在尝试将封闭委托(delegate)一般转换为开放委托(delegate),为了实现这一点,我似乎需要在实际创建结果委托(delegate)之前动态创建开放委托(delegate)的类型.考虑:

pubic class WeakEvent where TDelegate : class
{
public WeakEvent(Delegate aDelegate)
{
var dgt = aDelegate as TDelegate;

if(dgt == null)
throw new ArgumentException("aDelegate");

MethodInfo method = dgt.Method;
var parameters = Enumerable
.Repeat(dgt.Target.GetType(),1)
.Concat(method.GetParameters().Select(p => p.ParameterType));

Type openDelegateType = // ??? original delegate, with new 1st arg for @this

var dm = new DynamicMethod("InnerCode", method.ReturnType, parameters);

... your favourite IL code emmisions go here

var openDelegate = dm.CreateDelegate(openDelegateType);
}
}

上述代码的目的是创建一个与原始委托(delegate)相同的新委托(delegate),但cái này有一个新的第一个参数...即先前关闭的委托(delegate)的开放版本.

是否有一种简单的方法来克隆和修改现有的委托(delegate)类型,或者是否有最接近的解决方案来构建通用的 Func<> 和 Action<> 类型?

37 4 0
Bài viết được đề xuất: c# - 不支持协议(protocol) 'net.tcp'
Bài viết được đề xuất: c# - 永远不会调用主窗体的 OnLoad 覆盖
Bài viết được đề xuất: c# - 传递参数给线程问题
Bài viết được đề xuất: c# - 混叠问题
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com