如何声明与函数签名不同的新委托?

时间:2014-03-08 11:55:24

标签: c# .net delegates

delegate void EmptyBody(ref int first );
delegate void AnotherEmptyBody(int first );
delegate void AnotherEmptyBody1(int first, int second);

public void aaa(params object[] pars)
{
    DoSpecifiedProcessing();

    pars[0] = 11;
}

public bool OnInIt()
{
    int b = 0;

    b = 44;
    var n = new EmptyBody(aaa);
    n(ref b);
    //b variable must be 11


    b = 44;
    var x = new AnotherEmptyBody(aaa);
    x(b);
    //b shoudn't be changed in this call, so it should be 44
}

我正在尝试使用代码中定义的aaa这样的泛型函数 第一个调用应该更改b,因为它是作为by-ref传递的,但第二个调用不应该更改b,因为它是作为by-val传递的。

1 个答案:

答案 0 :(得分:0)

您不能使用代理人,因为代理人和aaa的参数不匹配 你可以做这样的事情(创建方法适配器aaaRefIntaaaInt):

public void aaaRefInt(ref int first)
{
    object[] Args = new object[]{first};        
    aaa(Args);
    first = (int)Args[0];
}

public void aaaInt(int first)
{
    aaa(new object[]{first});
}

var n = new EmptyBody(aaaRefInt);
n(ref b);

var x = new AnotherEmptyBody(aaaInt);
x(b);