关于c#的一段代码

有个c#的小问题想请教下下面是个c#小程序代码的一部分这个程序是一个数字小游戏运行后随机生成一个数字然后通过任意点击数字按钮按钮会提示比该数字大或者小最后找到该数字里面的... 有个c#的小问题想请教下
下面是个c#小程序代码的一部分
这个程序是一个数字小游戏 运行后随机生成一个数字 然后通过任意点击数字按钮 按钮会提示比该数字大或者小 最后找到该数字
里面的代码有一部分不太明白 如下:
G_th = new System.Threading.Thread( //新建一条线程
delegate()//使用匿名方法
{
int P_int_count = 0;//初始化计数器
while (true)//开始无限循环
{
P_int_count = //计数器累加
++P_int_count > 100000000 ? 0 : P_int_count;
this.Invoke(//将代码交给主线程执行
(MethodInvoker)delegate//使用匿名方法
{
lb_time.Text = //窗体中显示计数
P_int_count.ToString();
});
System.Threading.Thread.Sleep(1000);//线程睡眠1秒
}
});
以上代码中,关于delegate的使用有点疑惑,就是:
1、delegate()是使用匿名方法,(MethodInvoker)delegate也是使用匿名方法,二者有何区别?
2、MethodInvoker是什么?
3、应该什么时候使用delegate()?
诚盼赐教,不胜感激!
展开
 我来答
dualmind
2011-07-13 · TA获得超过270个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:172万
展开全部
1、delegate()是使用匿名方法,(MethodInvoker)delegate也是使用匿名方法,二者有何区别?
delegate(){}是申明匿名方法, 也可以理解为[方法]类型的字面量

this.Invoke((MethodInvoker)delegate{...}) 的等效代码:

public delegate void Dlg(); //定义delegate类型Dlg
public void Method1(){...} //申明方法, 方法的签名与委托类型Dlg申明一致即可以作为Dlg类型变量传递
Dlg dlgMethod1 = Method1; //申明Dlg类型变量, 赋值为Method1方法引用

则this.Invoke((MethodInvoker)delegate{...}) = this.Invoke((MethodInvoker)dlgMethod1);

2、MethodInvoker是什么?
// MethodInvoker的定义:
// 表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。
public delegate void MethodInvoker();
上面提到的Dlg类型与MethodInvoker定义的方法签名相同, 所以MethodInvoker类型变量与可以与Dlg类型变量互相cast

3、应该什么时候使用delegate()?
匿名方法不能从任何位置调用, 所以不存在delegate()
委托类变量可以调用, dlgMethod1()这样, 且不受引用方法的访问修饰符限制, 即private方法也可以调用. C#(.Net平台)的事件就是通过委托实现的

4 delegate默认的是强制转换为ThreadStart委托吗?(MethodInvoker)delegate后面为什么没有小括号?
public delegate void ThreadStart(); //ThreadStart类型定义, 同2
yzy19850106
2011-07-09 · TA获得超过133个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:87.8万
展开全部
都是匿名方法,后面没有区别,区别在前面,第一个是强制转换为ThreadStart委托,第二个是强制转换为MethodInvoker委托
MethodInvoker 是。net预定义的一个委托,提供一个简单委托,该委托用于调用含 void 参数列表的方法。 在对控件的 Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。
delegate一般与事件用在一起的时候比较多,另外,异步编程也用到
追问
delegate默认的是强制转换为ThreadStart委托吗?(MethodInvoker)delegate后面为什么没有小括号?
追答
如果匿名方法没有提供给委托的参数,因此可以省略参数列表,有参数时则不能省略;
另外第一个是隐式转换,第二个是显式转换,但都可以转换成功,因为参数第一个的参数和返回值与ThreadStart一致,第二个和MethodInvoker一致
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
158******83
2011-07-13 · TA获得超过256个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:314万
展开全部
完成任务的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式