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传递的。
答案 0 :(得分:0)
您不能使用代理人,因为代理人和aaa
的参数不匹配
你可以做这样的事情(创建方法适配器aaaRefInt
和aaaInt
):
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);