JUST DO IT ~

我只想当个程序员

dotnet 委托


委托 是一个类型



1.作用: 屏蔽方法名 ,灵活性动态性函数指针

2 .使用:

定义一个委托:      和一个类一样的

delegatevoid Del (int x);

或者

delegatevoid Del <T> (T x);

定一个委托变量和赋值

Main(){

Del d = obj.DoWork; 实例方法或者静态方法都可以   

}

   Del <int> g;

    g= Goodone;

    g(3333);

3 . 尽管委托可以使用不建议用 out 参数

但建议您不要将其用于多路广播事件委托,因为您无法知道哪个委托将被调用。

4. 委托中的协变和逆变----

--- 其实函数传递的子类自动适应父类参数和返回值

5 多播 :  + - 操作符重载了 可以添加多个 ,

    MethodClass obj = new MethodClass();

        Del d1 = obj.Method1;

        Del d2 = obj.Method2;

        Del d3 = DelegateMethod;

        Del allMethodsDelegate = d1 + d2;

        allMethodsDelegate += d3;

        System.Console.WriteLine("-1-");

        allMethodsDelegate("xx");







 

委托和接口都允许-------类设计的时候-----分离----------类型声明和实现。

条件:

任何类或结构都能继承和实现给定的接口。

可以为任何类上的方法创建委托,前提是该方法符合委托的方法签名

目的:

接口引用或委托可由不了解实现(动态性)该接口或委托方法的类的对象使用。

既然存在这些相似性,那么类设计器何时应使用委托,何时又该使用接口呢?

使用委托:

·                       当使用事件设计模式时。

·                       封装静态方法可取时。

·                       当调用方不需要访问实现该方法的对象中的其他属性、方法或接口时。

·                       需要方便的组合。

A - B - c 

B –a –c

C –b –a

·                       可能需要该方法的多个实现时。

--不是override 是函数返回值相同.但是参数不同

类型 A

Void method_a (string );

Void method_b(string);

Void method_c(string);

不同的方法名字,但是同一个方法的

使用接口:

·                       当存在一组可能被调用的相关方法时。

---   多个不同函数 , 需要

一个接口里面包含多个方法, 因为一个逻辑关系可能被调用. 所以放在一起

·                       当类只需要方法的单个实现时。

·                       当使用接口的类想要将该接口强制转换为其他接口或类类型时。

 多个接口套用

·                       当正在实现的方法链接到类的类型或标识时:例如比较方法。

使用单一方法接口而不使用委托的一个很好的示例是 IComparable 或泛型版本 IComparable(T)IComparable声明 CompareTo 方法,该方法返回一个整数,指定相同类型的两个对象之间的小于、等于或大于关系。

IComparable可用作排序算法的基础。虽然将委托比较方法用作排序算法的基础是有效的,但是并不理想。因为进行比较的能力属于类,

而比较算法不会在运行时改变,

所以单一方法接口是理想的。






posted on 2009-02-01 11:06 小高 阅读(223) 评论(0)  编辑  收藏 所属分类: DotNet


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

统计

常用链接

留言簿(3)

随笔分类(352)

收藏夹(19)

关注的blog

手册

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜