一道题目大家都选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回调的函数了,
[解决办法]
[解决办法]
所以返回类型是INT型,所以选B呀
[解决办法]
参数和返回类型必须一致
[解决办法]
B)
没看明白你的例子说明了什么?你的例子中方法是这样声明的:
private void game_ScoreChange(int newscore,ref bool cancel)
void返回类型,两个参数分别是int和ref bool
而定义的委托也是一样,void返回类型,两个参数int和ref bool。所以你的例子正好说明了:委托类型的赋值必须完全符合:
返回类型和签名的定义。
[解决办法]
deletegate和方法的参数类型,参数方法和返回类型都一样就可以了
[解决办法]