- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第12章VisualC#OOP技术1分析
第12章 Visual C#OOP技术2 主讲教师: 杨建军 教学目标 本章将继续介绍C#的OOP的技术,包括泛型、迭代器、操作符重载、部分类。这些都是面向对象编程中非常重要的内容,泛型更是C# 2.0才有的一项新技术,使用它们创建的类可以同时达到多种目的,并可以在许多不同的情况下使用。学习完本章内容,读者应该掌握面向对象编程的精髓,能够编写较复杂的应用程序。 教学重点 泛型(Generics) 可空类型 迭代器(Iterators) 操作符重载(Operator overloading) 部分类(Partial classes) 12.1泛型(Generics) 泛型是C# 2.0的一个新功能,它的宗旨是避免进行强制类型转换的需求,提高类型的安全性,减少需要的装箱量,以及让程序员能够更方便地创建泛化的类和方法。泛型类和泛型方法接收所谓的“类型参数”,它们指定了要操作的对象的类型。使用泛型类型可以使程序员能够实现最大限度地重用代码、保护类型的安全并获得更高的集合类性能。 泛型类和泛型方法兼复用性、类型安全和高效率于一身。泛型广泛用于容器(Collections)和对容器操作的方法中。.NET Framework 2.0的类库提供了一个新的命名空间System.Collections.Generic,其中包含了一些新的基于泛型的容器类。 12.1.1定义泛型类 在创建一个泛型类时,需要使用一个类型参数来定义类。其一般语法格式如下所示: [访问修饰符] 类型名T { ... } 其中,T代表类型参数,它作为占位符来使用,会在编译时被一个真正的类型所取代。 12.1.1定义泛型类 default关键字 :对引用类型返回空,对值类型的数值型返回零 没有约束的类型参数称为无绑定类型参数,而通过约束类型,可以把类型限制为用于实例化的泛型类 在C#中使用where关键字实现约束 可以用这种方式提供许多约束,各个约束间用逗号分隔开 也可以使用多个where语句,定义泛型类需要的任意类型或所有类型上的约束 12.1.1定义泛型类 在C#种,一共有5类约束,分别如下: where T: struct:类型参数必须为值类型。 where T : class:类型参数必须为引用类型。 where T : new():类型参数必须有一个公有、无参的构造函数。当于其它约束联合使用时,new()约束必须放在最后。 where T : base class name:类型参数必须是指定的基类型或是派生自指定的基类型。 where T : interface name:类型参数必须是指定的接口或是指定接口的实现。可以指定多个接口约束。接口约束也可以是泛型的 向普通的类型一样,也可以从泛型类派生新的泛型,但需要注意: 首先,如果某个类型在它所继承的基类型中受到了约束,那么,在派生类中,该类型不能“解除约束” 另外,如果继承了一个泛型类型,就必须提供所有必须的类型信息,这可以使用其他泛型类型参数的形式来提供,也可以显式提供 结构与类非常相似,只是有一些微小的区别,结构是值类型,而类是引用类型。所以,泛型结构可以用与泛型类相同的方式来创建 12.1.1定义泛型类 创建自己的泛型类时,需要重点考虑的事项有: 哪些类型应泛化为类型参数。一般的规律是,用参数表示的类型越多,代码的灵活性和复用性也就越大。过多的泛化会导致代码难以被其它的开发人员理解。 如果有约束,那么类型参数需要什么样的约束。一个良好的习惯是,尽可能使用最大的约束,同时保证可以处理所有需要处理的类型。例如,如果已知泛型类只打算使用引用类型,那么就应用这个类的约束。这样可以防止无意中使用值类型,同时可以对T使用as运算符,并且检查空引用。 把泛型行为放在基类中还是子类中。 是否实现一个或多个泛型接口。例如,要设计一个在基于泛型的容器中创建元素的类,可能需要实现类似IComparableT的接口。 12.1.2 定义泛型方法 泛型方法是声名了类型参数的方法,例如下面的方法用户交换两个相同类型变量的引用: void SwapT(ref T t1, ref T t2) { T temp; temp = t1; t1 = t2; t2 = temp; } 另外,在泛型方法中,非泛型方法能访问所在类中的类型参数 12.1.3 定义泛型接口 12.1.4 定义泛型委托 要定义泛型委托,只需声明和使用一个或多个
文档评论(0)