|
C#是面向对象的程序设计语言,有很多OO的特点,如接口、继承、多态、委托等,我发现这几次课老谢讲委托同学们都很痛苦,所以我在这里用尽量通俗易懂的语言来讲解这个另人发指的东西。
委托可以看作是C#的一种新类型,其实就算单按字面上的理解也能解释委托的性质,就是代理,代替某个方法去做某件事情。
1.合法的委托声明:
- delegate string GetString();
复制代码
也可以加上访问修饰符- public delegate string GetString();
复制代码 我们在这里合法地声明了一个无参数,返回类型为字符串的一个委托。
如果要声明一个名为MyDelegate的公有的委托,返回类型为Double,具有两个参数均为Long类型,则可声明如下:
- public delegate double MyDelegate(long l1,long l2);
复制代码
2.让我们的委托参与工作:
看下列代码,它诠释了一个最简单的委托的工作流程
- public delegate string GetString();
- class Class1
- {
- //结构体Currency
- struct Currency
- {
- public Currency()
- {}
- public static string GetCurrUnit()
- {
- return "dddd";
- }
- }
- static void Main(string[] args)
- {
- int x=11,y=22;
- //使委托绑定方法,绑定的方法是类型x的ToString方法,方法后省略参数列表是委托调用的特有格式,
- //因为我们声明的委托参数列表为0参数(没有参数),所以和ToString 0参数的重载函数,
- //符合我们之前声明的委托,所以委托对象g1绑定的是0参数的ToString
- GetString g1 = new GetString(x.ToString);
- //以下输出等同于输出x.ToString(),委托替我们完成了ToString将整型x转换为string型的工作
- Console.WriteLine(g1());
-
- //委托也可以调用结构体类型的方法,以下语句分别使得委托对象g1绑定的是结构体对象cu的ToString方法
- //和GetCurrUnit方法
- Currency cu = new Currency();
- g1 = new GetString(cu.ToString);
- Console.WriteLine(g1());
- //因为是静态方法,所以用类名直接引出
- g1 = new GetString(Currency.GetCurrUnit);
- Console.WriteLine(g1());
- Console.ReadLine();
- }
- }
-
复制代码
[ 本帖最后由 zkkpkk 于 2007-4-27 12:25 编辑 ] |
|