小编Ork*_*ane的帖子

c#发送动态方法委托加载参数化构造函数问题

我正在尝试通过发出动态方法来创建构造函数的委托表示,该方法必须匹配这个非常"松散类型"的签名,以便它可以与任何类型的参数化构造函数一起使用:

public delegate Object ParamsConstructorDelegate(params object[] parameters);
Run Code Online (Sandbox Code Playgroud)

并且创建委托的代码看起来像(注意这是针对Silverlight的)

public static ParamsConstructorDelegate CreateDelegate(ConstructorInfo constructor)
    {
        Guard.ArgumentNotNull(constructor, "constructor");
        Guard.ArgumentValue(constructor.GetParameters().Length == 0, MUSTBE_PARAMETERIZED_CONSTRUCTOR);

        var _argumentTypes = new Type[] { typeof(object[]) };
        var _parameters = constructor.GetParameters();
        var _parameterTypes = _parameters.Select((p) => p.ParameterType).ToArray();

        var _sourceType = constructor.DeclaringType;
        var _method = new DynamicMethod(constructor.Name, _sourceType, _argumentTypes);
        var _gen = _method.GetILGenerator();

        for (var _i = 0; _i < _parameters.Length; _i++)
        {
            if (_parameters[_i].IsOut || _parameterTypes[_i].IsByRef)
            {
                if (_i < 128)
                {
                    _gen.Emit(OpCodes.Ldarga_S, (byte)_i);
                }
                else
                    _gen.Emit(OpCodes.Ldarga, _i);
            } …
Run Code Online (Sandbox Code Playgroud)

c# constructor delegates reflection.emit dynamic-method

4
推荐指数
1
解决办法
2583
查看次数