C#学习笔记之泛型-泛型类

2025-04-21 02:08:43

1、1.首先介绍一个使用泛型文档管理器的示例。文档管理器用于从队列中读写文档。首先创建一个新的控制台项目,并添加DocumentManage<T>类。AddDoument()方法将一个文档添加到队列中。如果队列不为空,IsDocumentAvailable只读属性就返回true,代码如下图所示:

C#学习笔记之泛型-泛型类

2、2.默认值:现在给DocumentManage<T>类添加一个GetDocument()方法,在这个方法中,应把类型T指定为null ,但是不能把null赋予泛型类型。原因是泛型类型也可以实例化为值类型,二null值智能用于引用类型,为了解决这个问题,可以使用default关键字,通过default关键字,将null赋予引用类型,将0赋予值类型。

C#学习笔记之泛型-泛型类

3、3.约束:如果泛型类需要调用泛型类型中的方法,就必须添加约束。对于DocumentManage<T>,文档中的所有标题在DisplayAddDocument()方法显示,Document类实现带有Title和Content属性的IDocument接口

C#学习笔记之泛型-泛型类

4、要是用DocumentManage&盟敢势袂lt;T>类显示文档,可以将类型T强制转换为IDocument接口,以显示标题public void DIsplayAllDocuments(){foreach(T doc in documentQueue){Console.WriteLine((IDocument)doc.Title);}}如果这样,类型T没有实现IDocument接口,这个类型强制转换就会导致一个运行时异常,因此最好给DocumentManage定义一个约束:TDocument必须实现IDocument接口,为了在泛型类型的名称中指定该要求,将T改为TDocument,where子句指定了实现的IDocument接口的要求。

C#学习笔记之泛型-泛型类
C#学习笔记之泛型-泛型类

5、在Main()方法中,用Document类型实例化DocumentManage<TDocument>类,而Document类型实现了需要的IDocument接口。指着添加和显示新文档,检索其中一个文档,代码如下:注:在C#中,where子句的一个重要限制是,不能定义必须由泛型类型实现的运算符,运算符不能再接口中定义,在where子句中,只能定义基类、接口和默认的构造函数。

C#学习笔记之泛型-泛型类

6、4.继承:霏虍锚揣泛型类可以实现泛型接口,也可以派生自一个类。泛型类可以派生自泛型基类。public class Base<T>{}public c造婷用痃lass Derived<T>:Base<T>{}其要求是必须重复接口的泛型类型,或者必须制定基类的类型,如下例所示:public class Base<T>{}public class Derived<T>:Base<string>{}于是,派生类可以是泛型类或者是非泛型类。例如,可以定义一个抽象的泛型基类,他在派生类中,用一个具体的类实现。这允许对特定类型执行特殊的操作:

C#学习笔记之泛型-泛型类

7、5.静态成员:泛型类的静态成员需要特别关注。泛型类的静态成员只能在类的一个实例中共享。下面看一个例子,,其中StaticDemo<T> 包含静态字段x:public class StaticDemo<T>{public static int x;}由于同时对一个string类型和一个int类型使用了StaticDemo<T>类,因此存在两组静态字段:

C#学习笔记之泛型-泛型类
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢