版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
:泛型(Generic)方法(Anonymous
Method)迭代器(Iterator)局部类(Partial
Class)可空类型(Nullable
Type)静态类(Static
Class)属性
器修饰符Yield
Return2
.cn3
.cn1.泛型(Generic)引入泛型是C#2.0的最大的新特性:通过“参数化类型”实现一份代码操作多种数据类型。泛型的优点是更好的类型安全;更好的复用;更高的效率和更清晰的约束。
特点一:通过泛型可以定义类型安全的数据结构,无需使用具体实际的数据类型,能够显著提高性能并得到高质量的代码。特点二:泛型通过把类型参数化来达到代码重用的目标,这一特性可以应用在类、结构、接口、委托、方法的设计之中。特点三:还可以提供编译期间的类型检查,减少不必要的显式类型转换,减少不必要的装箱操作,从而提高应用程序的运行效率。1.1
泛型类using
System.Collections.Generic;例如,下面的Stack类将其所有的数据
在一个object类型的数组中,该类型的两个方法分别使用object来获取和返回数据:public
class
Stack{object[]
items;public
void
Push(object
item)
{...}public
object
Pop()
{...}}这样做的缺点:第一是性能:根据装箱和堆栈的功能,使用Push方法能够向堆栈中压入任何类型的值,然而,再重新获取堆栈中的数据值时必须在使用Pop方法拆箱的同时,使用显式类型转换得到合适的数据类型。这种装箱和拆箱的操作增加了执行的负担,因为它带来了动态内存分配和运行时类型检查。第二是类型安全。因为编译器允许在任何类型和Object之间进行强制类型转换,所以将造成编译时类型安全的不足。主要是Stack类无法强制设置堆栈中的数据类型。第三是工作效率。编写类型特定的数据结构以及冗繁的的转换代码是一项乏味重复的且易于出错的工作。4
.cn5
.cn以堆栈中实现泛型为例
Stack类示意代码:
public
class
Stack<T>{T[]
items;int
count;public
void
Push(T
item)
{...}public
T
Pop()
{...}}Demo:
Stack<>,List<>1.2
泛型方法C#泛型机制支持“在方法泛型方法。上包含类型参数”,即C#泛型机制不支持在除方法外的其他成员(包括属性、事件、索引器)的 上包含类型参数,但这些成员本身可以包含在泛型类型中,并使用泛型类型的类型参数。泛型方法既可以包含在泛型类型中,也可以包含在非泛型类型中。6
.cn通常一个方法或过程的签名都是有明确的数据类型的。如:public
void
ProcessData(int
i){}
public
void
ProcessData(string
i){}
publicvoid
ProcessData(decimal
i){}
publicvoidProcessData(double
i){}等。这些方法的签名中的:int
,string,decimal,double都是明确的数据类型,程序员
这些方法的过程中需要提供提定类型的参数:ProcessData(123);ProcessData("abc");ProcessData("12.12")而如果 int
,string,decimal,double这些类型也当成一种参数传给方法的时候方法的定义便是这样:public
void
ProcessData<T>(T
i){}//T是int
,string,decimal,double这些数据类型的指代用户在调用的时候便成了这样:ProcessData<string>("abc");ProcessData<int>(123);ProcessData<double>(12.23);这与通常的那些定义的最大区别是:方法的定义实现过程只有一个。但是它具有处理不同的数据类型数据的能力。2.方法(Anonymous
Method)在
2.0
之前的
C#
版本中,
委托的唯一方法是使用命
名方法。C#
2.0
引入了 方法:要将代码块传递为委托参数,创建
方法则是唯一的方法。可以直接将代码赋给委托。在进行委托实例化时可以省略掉委托类型。myButton.Click+=delegate{//代码}myButton.Click
+=
delegate(System.Object
o,System.EventArgs
e)
{System.Windows.Forms.MessageBox.Show("Click!");
};方法签名不能使用params关键字.9
.cn3.迭代器(Iterator)迭代器是方法、get
器或运算符,它使您能够在
类或结构
中支持
foreach迭代,而不必实现整个IEnumerator接口。您只需提供一个迭代器,即可遍历类中的数据结构。迭代器概述迭代器是可以返回相同类型的值的有序序列的一段代码。语法点:迭代器代码使用yield
return语句依次返回每个元素yield
break
终止迭代可以在类中实现多个迭代器。迭代器的返回类型必须为IEnumerable、IEnumerator、IEnumerable<T>或IEnumerator<T>。10
.cn迭代器简化了创建可以用于foreach的枚举集合的工作。通过引入关键字yield来实现,再不用太多的关心IEnumerator了,直接在类中实现GetEnumerator(),然后在for循环中用yieldreturn就可以了。能用foreach遍历 的对象需要实现IEnumerable接口和GetEnumerator()方法。11
.cn4.局部类(Partial
Class)C#
2.0
引入了局部类型的概念。局部类型允许一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。局部类型适用于以下情况:类型特别大,不宜放在一个文件中实现。一个类型中的一部分代码为自动化工具生成的代码,不宜与自己编写的代码混合在一起。需要多人合作编写一个类。局部类型是一个纯语言层的编译处理,不影响任何执行机制——事实上C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类。12
.cn局部类型的限制(1)局部类型只适用于类、接口、结构,不支持委托和枚举。同一个类型的各个部分必须都有修饰符partial。使用局部类型时,一个类型的各个部分必须位于相同名空间中。一个类型的各个部分必须被同时编译。中。13
.cn局部类型的关键字partial是一个上下文关键字,只有和class、struct、interface放在一起时才有关键字的含义。因此partial的引入不会影响现有代码中名称为partial的变量。局部类型的各个部分一般是分开放在几个不同的.cs文件中,但C#编译器允许 他们放在同一文件Partial
class不可以定义在不同的Assembly中14
.cn修饰符必须维持一致局部类型上的修饰符(1)一个类型的各个部分上的性。如果一个类型有一个部分使用了么整个类都将被视为抽象类。如果一个类型有一个部分使用了么整个类都将被视为密封类。一个类的各个部分不能使用相互修饰符,那sealed
修饰符,那的修饰符,比如,又在另一个部分上使用不能在一个部分上使用sealed。15
.cn16
.cn局部类型的基类和接口一个类型的各个部分上指定的基类必须一致。某个部分可以不指定基类,但如果指定,则必须相同。局部类型上的接口具有“累加”效应。partial
class
Class2:
Iinterface1,
Iinterface2
{}partial
class
Class2:
Iinterface3
{}partial
class
Class2:
Iinterface2
{}相当于class
Class2:
Iinterface1,
Iinterface2,Iinterface3
{}5.可空类型(Nullable
Type)可空类型可以表示基础类型的所有值,另外还可以表示:null
值。可空类型可通过下面两种方式中的一种T?
variable-或-System.Nullable<T>
variable例:int?x=null;语法点:使用HasValue属性判断是否为null;使用Value属性获得当前非空类型变量的值;把非空类型赋给一个普通类型时,需要显示转换17
.cn6.静态类(Static
Class)相当于sealed
,用途:可以用作全局函数。语法点:不能有constructor,不能有实例成员,不能再使用sealed
修饰,
该class不能被继承不能被实例化,只能包含静态成员。不能继承其他类 任何interface。成员不能使用protected修饰符。如:Math类为静态类18
.cn7.属性
修饰符C#中的get、get
器也支持使用属性或索引器的get
和set
部分称为“修饰符了.器”。通常是在保持get的情况下,限制set
器的可器可公开性。例如:public
string
Name
{get
{
return
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国抗皱晚霜行业投资前景及策略咨询研究报告
- 名著导读《海底两万里》课件
- 2024至2030年手机袋项目投资价值分析报告
- 2024至2030年国际象棋盒项目投资价值分析报告
- 初中化学化学式和化合价课件
- 勾股定理的应用课件
- 2024年防水无石棉硅酸镁管壳项目可行性研究报告
- 2024年铂铑合金制品项目可行性研究报告
- 2024年超细球状银粉项目可行性研究报告
- 2024年中国螺旋缝高频焊钢管市场调查研究报告
- 土地竣工决算审计实施方案
- 统计基础知识(中职财经商贸类专业)全套教学课件
- 专业学位研究生专业实践能力考核表
- 小学道德与法治-五年级上美丽文字民族瑰宝第一课时教学课件设计
- 【肿瘤标志物不同检验方式的临床研究进展综述报告5000字(论文)】
- 游戏综合YY频道设计模板
- 冲压失控行动计划-OCAP程序
- 四年级科学上册粤教版第1单元 生命的延续 单元练习二(含解析)
- Unit+5+Reading+Polyglots-+what+are+they+and+who+can+be+one-教学设计 高中英语人教版(2019)必修第一册
- 保密工作自查自评打分表
- Rexroth (博世力士乐)VFC 3610系列变频器使用说明书
评论
0/150
提交评论