求教C#带ref参数动态方法的实现[高难!]

guilinwangba 2010-09-17 10:47:19
如:
private bool refTest(string a, ref string b, ref string[] c)
{
b = b+a;
c[0] = c[0] + a;
return true;
}


当我使用如下方法实现时,报错:(方法标记不正确)

private delegate bool refInvokeHand(string p0, ref string p1, ref string[] p2);

static refInvokeHand GetRefInvoke()
{
Type[] methodArgs = { typeof(string), typeof(string).MakeByRefType(), typeof(string[]).MakeByRefType() };
DynamicMethod reftest2 = new DynamicMethod("reftest2", typeof(bool), methodArgs, typeof(Form1).Module);
ILGenerator il = reftest2.GetILGenerator();
il.Emit(OpCodes.Nop);
...
...
...

return (refInvokeHand)reftest2.CreateDelegate(typeof(refInvokeHand));
}
private bool refTest2(string a, ref string b, ref string[] c)
{
refInvokeHand myHand=GetRefInvoke();
return myHand(a,ref b,ref c);

}


...全文
335 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hernmmy 2011-08-03
  • 打赏
  • 举报
回复
params object[] list即可
guilinwangba 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 honkerhero 的回复:]
把string换成stringbuilder,利用对象的引用往外传
[/Quote]

这是种替换方案,就如同用传类或结构替换ref多参方法一样.当然,不同的是StringBuilder可以替换ref string或字符串儿指针,也是微软在P/Invoke 调用时的推荐方法.

这里试图寻求的是对这个问题疑问的解答,不寻求替换方案.(问题出来不能总绕过去不究细理)
非动态方法可以用ref string 动态方法为什么不可以?如何用?

对了,谢谢你的方案,很正宗.< 也可能除了它和指针我不会找到更好的途径, :) >
guilinwangba 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wxc1984 的回复:]
楼主要问啥啊?
[/Quote]

楼主要问如何用动态方法DynamicMethod实现上面那个函数!!

:)看来表达能力是有问题.让各位茫然了.

我在实现上述方法时出现了"方法标记不正确"的运行错误,而在网上并未搜到关于动态方法中使用ref 参数的例子,所以在此向各路高手请教.这种带ref参数的方法如何用DynamicMethod实现.dotnet4后引入了数据元组,而在2.0时,我们也可以用类代替这种多参返回的需求,但这里只想求教,这种合法的ref多参数方法的DynamicMethod实现方式.
wxc1984 2010-09-17
  • 打赏
  • 举报
回复
楼主要问啥啊?
guilinwangba 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lost_painting 的回复:]
不太明白楼主想做什么.
[/Quote]

用动态方法实现如下函数:
private bool refTest(string a, ref string b, ref string[] c)
{
b = b+a;
c[0] = c[0] + a;
return true;
}
鸭梨山大帝 2010-09-17
  • 打赏
  • 举报
回复
不太明白楼主想做什么.
guilinwangba 2010-09-17
  • 打赏
  • 举报
回复
对了,忘记说明:donet2.0!!!
4.0的下的数据元组就不必了,谢谢!
无涯大者 2010-09-17
  • 打赏
  • 举报
回复
引用参数ref 帮顶下~
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 honkerhero 的回复:]
把string换成stringbuilder,利用对象的引用往外传
[/Quote]
对,其实我更倾向于在外部处理数据再传递
honkerhero 2010-09-17
  • 打赏
  • 举报
回复
把string换成stringbuilder,利用对象的引用往外传
ZXY900213 2010-09-17
  • 打赏
  • 举报
回复
为什么引用类型还要用ref呢?
卧_槽 2010-09-17
  • 打赏
  • 举报
回复
typeof(Form1).Module
不是一个变量。
guilinwangba 2010-09-17
  • 打赏
  • 举报
回复
大家帮顶一下,谢谢!
xzjxylophone 2010-09-17
  • 打赏
  • 举报
回复
没有遇见过, 关注..

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧