首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一道题目大家都选B,小弟我有点疑惑,大家解释下(欢迎高手)

2012-02-25 
一道题目大家都选B,我有点疑惑,大家解释下(欢迎高手)声明一个委托publicdelegateintmyCallBack(intx)则用

一道题目大家都选B,我有点疑惑,大家解释下(欢迎高手)
声明一个委托public delegate int myCallBack(int x); 则用该委托产生的回调方法的原型应该是( )。  

a)void myCallBack(int x) ;  
b)int receive(int num) ;  
c)string receive(int x)  
 请问什么是“委托产生的回调方法的原型”?

------------
看了网上的解释,都选B,说是因为myCallBack(int x);里面参数是INT型的,所以就是B了

但是,问题来了,我记得以前的一个例子

C# code
public delegate void ScoreChangeEventHandler(int newscore, ref bool cancel);最后调这个委托时时这样的 //定义事件的类    public class referee    {        public referee(Game game)        {            game.ScoreChange+=new ScoreChangeEventHandler(game_ScoreChange);        }        private void game_ScoreChange(int newscore,ref bool cancel)        {            if(newscore<100)            {                System.Console.WriteLine("good");            }            else            {                 System.Console.WriteLine("bad");            }        }                    }显然game_ScoreChange是VOID类型的,而不是参数类型(又是INT ,有是 ref bool)
 

所以我觉得上面的A,B,C都是正确的,不知道大家怎么看的,希望高手指正

[解决办法]
public delegate int myCallBack(int x);
则该委托产生的回调方法的原型必须满足:
1)返回类型与delegate一致
2)参数类型,顺序,个数必须与delegate一致
方法的名称不用管了....
因此必须为 int FunName(int param1);

[解决办法]
看了网上的解释,都选B,说是因为myCallBack(int x);里面参数是INT型的,所以就是B了 
=============================
不是里面,是返回值
[解决办法]
b)int receive(int num) ;

[解决办法]
就是选B,myCallBack指向的函数必须满足相同的返回类型,参数列表类型,这个函数也就是被myCallBack回调的函数了,
[解决办法]
探讨
引用:
b)int receive(int num) ;

这里的INT后委托的前一个INT对应就可以了是吗?

[解决办法]
所以返回类型是INT型,所以选B呀
[解决办法]
参数和返回类型必须一致
[解决办法]
B)
没看明白你的例子说明了什么?你的例子中方法是这样声明的:
 private void game_ScoreChange(int newscore,ref bool cancel)
void返回类型,两个参数分别是int和ref bool
而定义的委托也是一样,void返回类型,两个参数int和ref bool。所以你的例子正好说明了:委托类型的赋值必须完全符合:
返回类型和签名的定义。


[解决办法]
deletegate和方法的参数类型,参数方法和返回类型都一样就可以了
[解决办法]
探讨
public delegate void ActionHandler(string args);
private void button1_Click(object sender, System.EventArgs e)
{
Form2 form=new Form2 ();
form.OnTextChange+=new ActionHandler(form_OnTextChange);
form.Show();
}
//调用一个函数
private void form_OnTextChange(string args)
{
this.textBox1.Text=args;
}
调用的时候form_OnTextChange怎么是VOID类型的.而不是 string 的

热点排行