摘要: 1. 委托的类型兼容 delegate void D1(); delegate void D2(); D1 d1 = Method1; D2 d2 = d1; 下面是被允许的: D2 d2 = newD2 (d1); 对于具体相同的目标方法的委托是被视为相等的: delegate void D(); 阅读全文
posted @ 2020-03-05 21:47 ElevenXiao 阅读(183) 评论(0) 推荐(1) 编辑
摘要: 有了泛型委托,就有了一能适用于任何返回类型和任意参数(类型和合理的个数)的通用委托,Func 和 Action。如下所示(下面的in表示参数,out表示返回结果): delegate TResult Func <out TResult> ();delegate TResult Func <in T, 阅读全文
posted @ 2020-03-05 21:39 ElevenXiao 阅读(187) 评论(0) 推荐(1) 编辑
摘要: 如果你知道泛型,那么就很容易理解泛型委托,说白了就是含有泛型参数的委托,例如: public delegate T Calculator<T> (T arg); 我们可以把前面的例子改成泛型的例子,如下: public delegate T Calculator<T>(T arg); class P 阅读全文
posted @ 2020-03-05 21:18 ElevenXiao 阅读(171) 评论(0) 推荐(1) 编辑
摘要: 当一个类的实例的方法被赋给一个委托对象时,在上下文中不仅要维护这个方法,还要维护这个方法所在的实例。System.Delegate 类的Target属性指向的就是这个实例。举个例子: class Program { static void Main(string[] args) { X x = ne 阅读全文
posted @ 2020-03-05 21:17 ElevenXiao 阅读(734) 评论(1) 推荐(1) 编辑
摘要: 所有的委托实例都有多播的功能。所谓多播,就像一群程序员在瞬聘网填好了求职意向后,某天有个公司发布了一个和这些程序员求职意向刚好相匹配的工作,然后这些求职者都被通知了 - “有一份好工作招人啦,你们可以直接申请去上班了!”。 也就是说,一个委托实例不仅可以指向一个方法,还可以指向多个方法。例如: My 阅读全文
posted @ 2020-03-05 21:14 ElevenXiao 阅读(406) 评论(0) 推荐(0) 编辑
摘要: 我们可以利用“委托是一个能把方法作为参数传递的对象”这一特点,来实现一种插件式编程。 例如,我们有一个Utility类,这个类实现一个通用方法(Calculate),用来执行任何有一个整型参数和整型返回值的方法。这样说有点抽象,下面来看一个例子: delegate int Calculator(in 阅读全文
posted @ 2020-03-05 21:08 ElevenXiao 阅读(231) 评论(0) 推荐(1) 编辑
摘要: 委托太常见了,能灵活运用可以使你在编程中游刃有余。简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名)。 委托的简单使用 一个委托类型定义了该类型的实例能调用的一类方法,这些方法含有同样的返回类型和同样参数(类型和个数相同)。委托和 阅读全文
posted @ 2020-03-05 21:03 ElevenXiao 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 多态性(C# 编程指南)转自MSDN 通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型,或者在实现接口时用作任何接口类型。这称为多态性。C# 中的每种类型都是多态的。类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object 当作基类型。 多态性不仅对派 阅读全文
posted @ 2020-03-05 20:53 ElevenXiao 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称、参数和返回值。 接口方法不能包含任何实现,CLR允许接口可以包含事件、属性、索引器、静态方法、静态字段、静态构造函数以及常数。但是注意:C#中不能包含任何静态成员。 一个类可以实现多个接口,当一个类继承某个接口时,它不仅要实现该 阅读全文
posted @ 2020-03-05 20:45 ElevenXiao 阅读(161) 评论(0) 推荐(1) 编辑
摘要: 反射是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。有了反射,即可对每一个类型了如指掌。另外我还可以直接创建对象,即使这个对象的类型在编译时还不知道。 反射的用途: (1)使用Assembly定义和加载程序集,加载在程 阅读全文
posted @ 2020-03-05 20:32 ElevenXiao 阅读(152) 评论(0) 推荐(1) 编辑
摘要: C# Generics and C++ templates are both language features that provide support for parameterized types. However, there are many differences between the 阅读全文
posted @ 2020-03-05 20:05 ElevenXiao 阅读(310) 评论(0) 推荐(0) 编辑
摘要: 2.0版的.NET框架类库提供了一个新的命名空间,System.Collections.Generic,其中包含了一些已经可以使用的泛型容器类和相关的接口。和早期版本的.NET框架提供的非泛型容器类相比,这些类和接口更高效且是类型安全的。在设计、实现自定义的容器类之前,请你考虑是否使用或继承所列出类 阅读全文
posted @ 2020-03-05 20:03 ElevenXiao 阅读(164) 评论(0) 推荐(0) 编辑
摘要: 当泛型类或泛型方法被编译为微软中间语言(MSIL)后,它所包含的元数据定义了它的类型参数。根据所给的类型参数是值类型还是引用类型,对泛型类型所用的MSIL也是不同的。 当第一次以值类型作为参数来构造一个泛型类型,运行时用所提供的参数或在MSIL中适当位置被替换的参数,来创建一个专用的泛型类型。[JX 阅读全文
posted @ 2020-03-05 20:01 ElevenXiao 阅读(360) 评论(0) 推荐(1) 编辑
摘要: 在泛型类和泛型方法中会出现的一个问题是,如何把缺省值赋给参数化类型,此时无法预先知道以下两点: l T将是值类型还是引用类型 l 如果T是值类型,那么T将是数值还是结构 对于一个参数化类型T的变量t,仅当T是引用类型时,t = null语句才是合法的; t = 0只对数值的有效,而对结构则不行。这个 阅读全文
posted @ 2020-03-05 19:59 ElevenXiao 阅读(218) 评论(0) 推荐(1) 编辑
摘要: 无论是在类定义内还是类定义外,委托可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数来创建一个封闭构造类型,这和实例化泛型类或调用泛型方法一样,如下例所示: public delegate void MyDelegate<T>(T item); public void Notify(int 阅读全文
posted @ 2020-03-05 19:57 ElevenXiao 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 泛型方法是声名了类型参数的方法,如下: void Swap<T>( ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; } 下面的示例代码显示了一个以int作为类型参数,来调用方法的例子: int a = 1; int 阅读全文
posted @ 2020-03-05 19:55 ElevenXiao 阅读(746) 评论(0) 推荐(0) 编辑
摘要: 不论是为泛型容器类,还是表示容器中元素的泛型类,定义接口是很有用的。把泛型接口与泛型类结合使用是更好的用法,比如用IComparable<T>而非IComparable,以避免值类型上的装箱和拆箱操作。.NET框架2.0类库定义了几个新的泛型接口,以配合System.Collections.Gene 阅读全文
posted @ 2020-03-05 19:50 ElevenXiao 阅读(549) 评论(0) 推荐(1) 编辑
摘要: 泛型类封装了不针对任何特定数据类型的操作。泛型类常用于容器类,如链表、哈希表、栈、队列、树等等。这些类中的操作,如对容器添加、删除元素,不论所存储的数据是何种类型,都执行几乎同样的操作。 对大多数情况,推荐使用.NET框架2.0类库中所提供的容器类。有关使用这些类的详细信息,请参见基础类库中的泛型。 阅读全文
posted @ 2020-03-05 19:46 ElevenXiao 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 若要检查表中的一个元素,以确定它是否合法或是否可以与其他元素相比较,那么编译器必须保证:客户代码中可能出现的所有类型参数,都要支持所需调用的操作或方法。这种保证是通过在泛型类的定义中,应用一个或多个约束而得到的。一个约束类型是一种基类约束,它通知编译器,只有这个类型的对象或从这个类型派生的对象,可被 阅读全文
posted @ 2020-03-05 19:42 ElevenXiao 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 在泛型类型或泛型方法的定义中,类型参数是一个占位符(placeholder),通常为一个大写字母,如T。在客户代码声明、实例化该类型的变量时,把T替换为客户代码所指定的数据类型。泛型类,如泛型概述中给出的MyList<T>类,不能用作as-is,原因在于它不是一个真正的类型,而更像是一个类型的蓝图。 阅读全文
posted @ 2020-03-05 19:39 ElevenXiao 阅读(1637) 评论(0) 推荐(0) 编辑