关于反射委托的一点小疑问

gudamzero 2010-05-07 12:02:04
通过下面的代码可以执行tt()这个函数,如果我想让dd执行完tt(),继续执行tt2()应该怎么办?(需要执行的方法名称是从字符串中读取出来的)

protected void Page_Load(object sender, EventArgs e)
{
Wd wd = new Wd();
wd.cheng();
}
public delegate void DD(object sender, EventArgs e);

public class test {
public test() {
}

public void tt(object sender,EventArgs e) {
System.Web.HttpContext.Current.Response.Write(String.Format("tt<br>"));
}
public void tt2(object sender, EventArgs e)
{
System.Web.HttpContext.Current.Response.Write(String.Format("tt2<br>"));
}
}

public class Wd {

public void cheng() {
Delegate dd;
test tt=new test();

dd = Delegate.CreateDelegate(typeof(DD), tt, "tt");
//dd = Delegate.CreateDelegate(typeof(DD), tt, "tt2");

if (dd != null)
{
dd.DynamicInvoke(this, null);
}
}

}
...全文
134 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gudamzero 2010-05-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pengyi_205 的回复:]
浪费表情。。。


C# code

protected void Page_Load(object sender, EventArgs e)
{
test tes = new test();
string[] FunName = { "WriteOne", "WriteTwo" };
foreach (stri……
[/Quote]
貌似只能遍历了,thanks
zhujiazhi 2010-05-07
  • 打赏
  • 举报
回复
dd = Delegate.CreateDelegate(typeof(DD), tt, "tt");
dd += Delegate.CreateDelegate(typeof(DD), tt, "tt2");
  • 打赏
  • 举报
回复
你直接写tt.tt2(....)不就行了嘛!

反射,不应该随便炫耀的。
sxy445566 2010-05-07
  • 打赏
  • 举报
回复
学习。。
帮顶。。
夺命胖子 2010-05-07
  • 打赏
  • 举报
回复
浪费表情。。。


protected void Page_Load(object sender, EventArgs e)
{
test tes = new test();
string[] FunName = { "WriteOne", "WriteTwo" };
foreach (string fun in FunName)
{
MethodInfo methodInfo = typeof(test).GetMethod(fun, BindingFlags.Public | BindingFlags.Instance);
methodInfo.Invoke(tes, new object[] { sender, e });
}

}


一样能行。。怪异
夺命胖子 2010-05-07
  • 打赏
  • 举报
回复
MethodInfo methodInfo = this.GetType().GetMethod(fun, BindingFlags.Public | BindingFlags.Instance);

没用。。
夺命胖子 2010-05-07
  • 打赏
  • 举报
回复


public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
test tes = new test();
string[] FunName = { "WriteOne", "WriteTwo" };
foreach (string fun in FunName)
{
Delegate write;
MethodInfo methodInfo = this.GetType().GetMethod(fun, BindingFlags.Public | BindingFlags.Instance);
write = Delegate.CreateDelegate(typeof(WriteContent), tes, fun, false);
write.DynamicInvoke(this, e);
}

}
}

public class test
{
public test()
{
}

public void WriteOne(object sender, EventArgs e)
{
System.Web.HttpContext.Current.Response.Write(String.Format("tt<br>"));
}
public void WriteTwo(object sender, EventArgs e)
{
System.Web.HttpContext.Current.Response.Write(String.Format("tt2<br>"));
}
}

public delegate void WriteContent(object sender, EventArgs e);

jshi123 2010-05-07
  • 打赏
  • 举报
回复
string[] funcs = new string[] { "tt", "tt2" };
Delegate dd;
test tt=new test();
foreach (string f in funcs){
dd = Delegate.CreateDelegate(typeof(DD), tt, f);
if (dd != null)
{
dd.DynamicInvoke(this, null);
}
}
gudamzero 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jshi123 的回复:]
Delegate dd, dd2;
test tt=new test();
dd = Delegate.CreateDelegate(typeof(DD), tt, "tt");
dd2 = Delegate.CreateDelegate(typeof(DD), tt, "tt2");
if (dd != null)
{
dd.DynamicInvoke(this, null)……
[/Quote]
- -这样是可以,但是不是我的目的。我是想从一个数组里面读取函数名,然后通过委托把这些函数实现
jshi123 2010-05-07
  • 打赏
  • 举报
回复
Delegate dd, dd2;
test tt=new test();
dd = Delegate.CreateDelegate(typeof(DD), tt, "tt");
dd2 = Delegate.CreateDelegate(typeof(DD), tt, "tt2");
if (dd != null)
{
dd.DynamicInvoke(this, null);
}
if (dd2 != null)
{
dd2.DynamicInvoke(this, null);
}
gudamzero 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhujiazhi 的回复:]
dd = Delegate.CreateDelegate(typeof(DD), tt, "tt");
dd += Delegate.CreateDelegate(typeof(DD), tt, "tt2");
[/Quote]
dd += Delegate.CreateDelegate(typeof(DD), tt, "tt2");
不能这么用,出错........
gudamzero 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sp1234 的回复:]
你直接写tt.tt2(....)不就行了嘛!

反射,不应该随便炫耀的。
[/Quote]
- -不是炫耀........

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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