日期:2014-05-19  浏览次数:21097 次

关于委托的基础问题~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
C#   高级编程第六章   讲委托.第一个小例子我就不太明白
例子是这样
        class   Program
        {
                private   delegate   string   GetAString();
                static   void   Main(string[]   args)
                {
                        int   X   =   40;
                        GetAString   FirstStringMethod   =   new   GetAString(X.ToString);
                        Console.WriteLine( "String   is "   +   FirstStringMethod());
                }
        }

=============================================
这一句
GetAString   FirstStringMethod   =   new   GetAString(X.ToString);
这里的GetAString怎么会有个参数.定义的时候也没有加参数.   不是很明白.

菜鸟的问题.指教一下,谢谢


------解决方案--------------------
private delegate string GetAString();
这句并不是说明委托是什么样子,而是说委托所指向的方法是什么样子
而X.ToString是一个没有参数、返回string的方法
所以用GetAString FirstStringMethod = new GetAString(X.ToString);将委托和方法关联起来
------解决方案--------------------
再给一个例子
using System;

namespace 委托
{
delegate int NumOpe(int a,int b); //委托声明
class Class1
{
static void Main(string[] args)
{
Class1 c1 = new Class1();
NumOpe p1 = new NumOpe(c1.Add); //委托实例化
Console.WriteLine(p1(1,2)); //委托调用
Console.ReadLine();
}

private int Add(int num1,int num2)
{
return(num1+num2);
}
}
}
------解决方案--------------------
X.ToString不是参数!
String FirstStringMethod = new GetAString(X.ToString);的括号里表示要执行的方法!
而这个方法就是X.ToString
委托定义里的参数是方便那个括号里要执行的方法的参数!也即ToString()的参数,而非GetAString()的参数!
ToString没有参数,所以没什么问题!