C#程序设计课程.pptVIP

  • 18
  • 0
  • 约5.36万字
  • 约 268页
  • 2019-04-19 发布于湖北
  • 举报
泛型中的静态构造函数 静态构造函数的规则:只能有一个,且不能有参数,他只能被.net运行时自动调用,而不能人工调用。 泛型中的静态构造函数的原理和非泛型类是一样的,只需把泛型中的不同的封闭类理解为不同的类即可。以下两种情况可激发静态的构造函数:   1. 特定的封闭类第一次被实例化。   2. 特定封闭类中任一静态成员变量被调用 泛型委托 可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样 。 public delegate void DelT(T item); public static void Notify(int i) { } Delint m1 = new Delint(Notify); 泛型委托 引用委托的代码必须指定包含类的类型变量 class StackT { T[] items; int index; public delegate void StackDelegate(T[] items); } private static void DoWork(float[] items) { } public static void TestStack() { Stackfloat s = new Stackfloat(); Stackfloat.StackDelegate d = DoWork; } 泛型--default 在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T: T 是引用类型还是值类型。 如果 T 为值类型,则它是数值还是结构。 解决方案是使用 default 关键字,此关键字对于引用类型会返回空,对于数值类型会返回零。对于结构,此关键字将返回初始化为零或空的每个结构成员,具体取决于这些结构是值类型还是引用类型。 泛型--default public class GenericListT { private class Node { //... public Node Next; public T Data; } private Node head; //... public T GetNext() { T temp = default(T); Node current = head; if (current != null) { temp = current.Data; current = current.Next; } return temp; } } 泛型 示例 Sample\CSharp\Generic\Generics 泛型 练习(抽象类,事件,泛型) 定义一个抽象类Shape,它有抽象属性Area(面积),类Circle和Reactangle是Shape的子类。容器类ShapeContainer中有ListShape集合,它包含Shape,每向ListShape集合中添加一个Shape时触发一个事件ShapeAdded,并提供面积参数。 Sample\CSharp\Generic\Shape1 迭代器 迭代器是可以返回相同类型的值的有序序列的一段代码。 迭代器可用作方法、运算符或 get 访问器的代码体。 迭代器代码使用 yield return 语句依次返回每个元素。yield break 将终止迭代。 可以在类中实现多个迭代器。每个迭代器都必须像任何类成员一样有唯一的名称,并且可以在 foreach 语句中被客户端代码调用,如下所示:foreach(int x in SampleClass.Iterator2){} 迭代器的返回类型必须为 IEnumerable、IEnumerator、IEnumerable 或 IEnumerator。 迭代器 Yield 关键字用于指定返回的值。到达 yield return 语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行。 迭代器 public class DaysOfTheWeek : System.Collections.IEnumerable { string[] m_Days = { Sun, Mon, Tue, Wed, Thr, Fri, Sat }; public System.Collections.IEnumerator GetEnumerator()

文档评论(0)

1亿VIP精品文档

相关文档