版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章.NET4.0体系构造
微软企业每隔几年就会对其开发工具与平台进行升级,使得开发人员能更高效、更迅
速地开发高可用性的应用程序。.NETFramework4.0是最新的J一种版本。该版本与.NET
FrameworkH勺初期版本是可以同步存在欧J。本章将从体系构造方面讲解.NET4.0的新功能
及其与.NET初期版本的不一样之处,同步对于微软新的VisualStudio2023『、J使用措施进
行详细简介。
1.1C#与.NET日勺关系
C#是微软企业为了支持.NET框架而研发的一门语言,它具有JavaH勺简洁、C++语言
的灵活,并且有Pascal语言的严谨,是一门非常优秀的开发语言。.NET框架是一种应用程
序开发平台,C#是为支持这个框架而开发的,它们具有非常亲密H勺联络。作为一种.NET
开发者,学会使用C#语言是非常有必要的J。
C#与.NET之间的J关系是非常亲密的。C#只是一门语言,并且它是伴伴随.NET出现的
语言,用C#语言编程时,需要使用.NET框架类库来进行开发。不过与.NET框架有关的语
言不止C#•种,开发人员可以使用VisualBasic.NET或者其他某些支持.NET的语言进行
程序设计。
.NETFramework4.0简介
微软企业自从公布.NETFramework1.1以来,已历经了4个版本。微软不停地改善原
有版本R勺缺陷和局限性,不停地推出新的功能,到目前的4.0版本,已经成为了一种功能
强大的应用程序开发平台,共发展路线如图1.1所示。
.NETFramework提供了一整套应用程序开发平台,它实际上由一大堆技术组合而成,
这些技术彼此协作,能为开发人员提供无限时也许。归根结底,.NETFramework由如下儿
大部分构成。
□.NET语言:包括VisualBasic.NET、C#>JScript.NET、J#和C++等。
□通用语言运行时(CLR):提供所有.NET程序的执行引擎,并为这些应用程序提
供自动化服务,例如安全性检查、内存的管理和应用程序的优化等。
□.NET框架类库:包括大量内置口勺功能函数,使应用程序的开发人员可以更轻松地
使用它提供的功能来实现应用程序的开发。这些类库被组织为几种技术集,例如
ASP.NET、WindowsForms>WPF、WCF>WF、Silverlight>网络编程等。
□VisualStudio:功能强大,使用简便口勺集成化开发环境,具有一整套高效的I功能美
合和调试特性。
图1.1.NET版本发展路线图
在MSDN中,把整个.NETFramework分为两大类:一类是通用语言运行时(CLR),
另一类就是.NETFramework类库。通用语言运行时是整个.NET应用程序的关键,无论使
用什么样口勺语言,编写什么样的.NET程序,都需要这个关键引擎所提供R勺关键功能。
图1.2是.NETFramework时基本构造图,该图将.NET划分为两大部分,每一部分内
部又细分了多种不一样H勺功能模块。在类库部分,可以看到提供了诸多开发人员常见的应
用程序类型,基本上.NET程序员都在与.NETFramework中庞大的类库打交道。通用类型
系统为.NET应用程序提供了一种托管H勺平台,它提供了较底层H勺功能,一般开发人员较少
需要处理CLR的部分。
.NETFramework类库
核心服务(线程、序列化、反射、集合等)
运用语言运行时(CLR)
内存管现和坨圾收集
其他托管服务|
代6可校验和优化|代码访问安全
图1.2.NETFramework基本构造
微软企业自从推出第一种.NETFramework以来,不停地升级和精炼这套框架时可月
性。到目前为止,已经发展到.NET4.0版。这一版本肛NETFramework除了修正和提高了
原有框架的局限性之处以外,还增长了诸多新日勺开发类库,例如WPF、WCF和WF这3
套开发基础库。
要深入理解.NETFramework这个大框架附架构,首先需要深入理解其关键部分,即
CLR。1.2节将会详细简介。
LINQ语言集成查询
在LINQ出现之前,当访问数据源时,开发人员不得不掌握特定数据来源H勺数据访问
措施。例如要读取和写入XML数据,必须掌握操作XML的措施;要访问数据库,必须掌
握ADO.NET技术等。
语言集成查询(LanguageIntegratedQuery,LINQ),如其名称所暗示,在开发语言如
C#或者是VB.NET中集成了数据查询功能,这个功能口勺出现让开发人员可以不用理解异构
例如,对于关系型数据库为说,一般使用SQL语句来直询数据库。要查询Northwind
数据库中employees表的Name字段,使用SQL语句语法如下所示。
Selectnamefromemployees
使用LINQ语法的话,语法与之类似,代码如下所示。
varquf?ry=formainemployees
selecte.name
可以看到代码与SQL语句非常相似,不过使用L1NQ,让开发人员可以用相似的语法
查询异构数据源。例如一种employees口勺对象的集合,或是来自Oracle数据库的数据,都
可以使用相似H勺语法进行查询。
WPF体现层技术简介
WPF是一种基于矢量绘图引擎的顾客界面技术,也可以称其为下一代时显示系统。
WPF可以让具有发明力的设计人员设计具有震撼视觉体验的Windows客户端应用程序的
顾客界面,也可以使用其子集Silverlight创立具有发明力的WebBase应用。
WPF有如下几项重大I付功能特色。
□基于矢量的I绘图技术:WPF基于DireclX,可以最大化地运用显示卡的性能。基亍
矢量绘图技术,可以无限地放大和缩小图形。WPF运用Direct3D进行图形着色,
充足运用显示卡欧I绘图单元。
□采用申明式的J程序设计:使用派生自XMLU勺XAML标识语言来申明式的设计UI,
设计人员也可以选杼微软的JExpressionBlend设计软件进行UI部分的可见即所得
的设计。
□Web样式的布局模型:增强了流式布局模型H勺体验,除了使用坐标进行布局外,
还可以使用流动式布局排列顾客控件。
□强大的绘图功能的支持:除了支持基本图形、文本块外,还提供了诸多绘图特性,
例如透明度及内置的3D支持。
□与多媒体、动画技术的完美整合:设计人员可以使用XAML标识或借助于
ExpressionBlend软件来设计顾客界面动画。
□样式和模板:用于重用已经有的样式设定,使用模板可以变化元素H勺显示方式,
使用样式可认为控件形成换肤效果。
WCF通信层技术简介
WCF是一种统一口勺技术,是微软基于SOA(ServiceOrientedArchitecture,面向服务
的架构)所推出口勺.NET平台下的开发框架。WCF是微软分布式应用程序开发的最新开发
框架,它整合/.NET平台下肚)分布式开发技术,例如.NETRcmotingsWebService和MSMQ
等,使开发者可以创立一种跨平台H勺、安全可信赖,以及事务性的处理方案。
WCF具有如下3大基础概念。
□消息和终止点:WCF建立在基于消息通信的基础之上,可以用消息表达H勺任何内
容,如祈求和MSMQ消息都可以使用一种统一的编程模型来表达。这样,可
以在不一样的传播方式中提供统一的API。消息在终止点之间传送,终止点是发送
或接受消息的场所,终止点定义消息互换所需要的所有信息。
□通信协议:元素H勺传播协议,在WCF中这是必需的。可以使用常用的传播协议如
和TCP,可以通过局域网或互联网来发送消息,也可以使用其他支持与MSMQ应
用程序和对等网上的节点进行通信的传播协议,并且使用WCF的可扩展特性可以
添加更多的传播机制。通信堆栈中另一种必要口勺元素是消息格式H勺编码,在WCF
中,可以使用文本编优、消息传播优化机制编码及用于实现高效传播的二进制编
码。
□消息模式:WCF支持多种消息模式,不一样H勺传播协议支持不一样H勺消息模式,
包括祈求-答复模式、单向模式和双工通信模式。
有关更多WCF编程H勺细节知识,读者可以参照MSDN上H勺WCF内容或专门简介WCF
的书籍。
WF工作流基础简介
WF是微软在.NET3.0之后推出H勺一套工作流开发框架,目的在于为既有的.NET应月
程序嵌入工作流应用。WF不是一种独立R勺工作流应用程序,它提供了某些类库用于辅助
工作流应用程序的开发,并提供了实现工作流应用程序时所需要实现口勺某些机制,例如持
久化、赔偿、跟踪机制等。
首先必须要明白,WF不是某一领域或通用领域的工作流应用程序,它是一种编程模
型、一种工作流的引擎,重要目的是在Windows上迅速启用工作流的应用程序。使用WF
可以处理的处理方案如下:
□可认为业务流程应用程序启用工作流;
□顾客界面页面流;
□文档工作流系统;
□人工工作流;
□业务规则驱动的工作流;
□系统管理工作流。
WF有如下几种基本特点。
□WF具有强大和灵活R勺工作流开发能力,使用VisualStudio提供的可视化设计工具
和WF的运行时引擎,让开发人员可以以一种统一的I方式开发应用程序。
□WF支持次序工作流、状态机工作流和数据驱动工作流风格,并且支持工作流向持
久化。这对于某些需要一天甚至一年之后再继续的,作流来说非常有用。
□WF支持使用特定领域模型处理问题,开发人员可以开发自己的活动组件,来引入
对于特定领域问题的处理措施。
□WF提供了完整的工作流开发系统,除了工作流运行时自身,微软也提供了一套原
则的活动、工作流持久化、工作流监控和追踪、规贝]引擎、与VS紧密整合的工作
流设计器,以及项目开发模板等。
□可以修改WF的默认行来扩展WF,例如可以提供自定义H勺持久化服务来取代WF
提供於JSQL持久化服务。
□对于企业来说,最重要的J是WF包括在VisualStudio中,不必花费额外成本。
WindowsCardSpace技术简介
伴随Internet的)普及以及顾客对于网络H勺依赖性口勺增强,越来越多H勺安全性问题也暴
露出来,例如顾客的个人信息和账户口勺安全性问题。伴随网龄的增长,顾客必须记住越我
越多的账户和密码,以及许多网站反复使用相似H勺账户名和密码。微软在.NET3.0中推巴
了CardSpace标识元系统的实现,使顾客可以从标识公文包中选择标识,并在接受这些标
识的环境中使用这些标识。
在安装了.NETFramework4.0之后,控制面板中会增长一种名为WindowsCardSpace
的选项,选择该项之后,将会弹出一种编辑或查看卡片H勺窗口,顾客可以在该窗口中输入
卡片,或导入一种托管卡片,如图1.4所示。然后可以对应用程序进行编写代码,以便可
以从标识管理器中选出一种标识进行顾客的统一身份验证。
图1.4控制面板中的创立卡片对话框
1.2公共语言运行时
公共语言运行时(CommonLanguageRuntime,CLR)是一种和Java虚拟机同样的运
行时环境,重要负责资源口勺管理,例如内存分派和垃圾搜集,以保证应用和底层操作系统
之间的分离。简而言之,.NET框架能保证顾客可以使用多种语言进行.NET应用程序的开
发和交互,由于CLR实现了通用语言基础架构(CommonLanguageInfrastructure,CLI)u
通用语言基础架构CLI
通用语言基础架构定义了构成.NETFramework基础构造的可执行代码,以及代码运行
时的环境规范。它定义了一种与语言无关R勺跨体系构造H勺运行环境,这使得开发者可以月
规范内定义的多种高级语言来开发软件,并且不必修正即可将软件运行在不一样的计算机
体系构造上。
&注意:CLI与CLR不要混用,CLI是一种规范,而CLR是这种规范R勺一种实现。
CLI是一种开发型H勺技术规范,由微软、惠普和英特尔于2023年向ECMA倡议时,
在CLI中包拈如下几种事要的部分。
□通用类型系统(CTS):规范.NET中数据的类型。
□元数据系统(Metadala):是.NET中描述数据的数据。
□通用语言规范(CLS):描述多语言之间进行交互的语言规范,.NET系统包括的
语言有C#、C++、VB、J#,它们都遵守通用语言规范。
□虚拟执行系统(VES):是一种可运行受管理代码(ManagedCode)的运行环境,
它提供了运行受管理代码所需要的内置数据类型(datatype),以及假定的)机器型
态与状态设置、流程控制与例外处理等参数。
整个CLI的架构如图1.5所示。
SourcecodeBytecodeNativecode
Nativecode
CompiletimeRintime
图1.5CLI架构
.NET的系统构造是非常庞大和复杂的),要想全面理解,需要学习大量H勺知识。读者可
以参照MSDN中的简介。
1.2.2CLR日勺作用
有了公共语言运行时,开发人员就可以很轻易地设计出对象可以跨语言交互H勺组件和
应用程序。也就是说,用不一样语言编写日勺对象可以互相通信,并且它们日勺行为可以紧密
集成。
例如,可以定义一种类,然后使用不一样H勺语言从原始类派生出另一种类或词用原始
类的措施。还可以将一种类口勺实例传递到用不一样口勺语言编写口勺另一种类口勺措施。这种跨
语言集成之因此成为也许,是曰于基于公共语言运行库H勺语言编译器和工具使用由公共语
言运行库定义的通用类型系统,并且它们遵照公共语言运行库有关定义新类型,以及创立、
使用、保持和绑定到类型H勺规则。
相对于过去的某些开发平台(例如Delphi),.NETCLR有如下长处:
□跨语言集成,尤其是跨语言继承,使得用VB.NET写的类能轻松H勺被C#类继承。
□垃圾回收,它管理对彖生存期,使引用计数变得不再必要,程序员不必关怀类时
释放问题,一切都由CLRH勺垃圾回收器在后台回收。
□自我描述的对象,它使得使用接口定义语言(IDL)不再是必要日勺,使用.NET反
射可以很轻松地获取到运行时类型信息。
□编译一次即可在任何支持公共语言运行时的CPU和操作系统上运行的能力。
1.3节将深入到语言层次,对C#语言H勺新特性进行讲解。
1.3C#4.0日勺新增特性
回忆C#语言H勺发展,从1.0到目前的4.0,每一种版本都会增长某些激感人心的特性。
例如2.0加入了对泛型的支持,3.0新增了某些语法特性以支持LINQ等开发框架,在C#4.0
中增长了动态语言等特性。要全面理解C#语言,需要全面掌握这些已经有的功能和新增特
性,这样才能最大程度地发挥C#语言的功能。
1.3.1C#4.0面向对象编程简介
C#是一门纯面向对象的语言。在C#语言中连基本的数据类型都是派生于System.object
的类型,例如int、double等。与使用Java语言同样,应当具有万事万物皆对象的理念只
使用C#进行程序设计,这需要读者具有良好的面向对象编程的思想。
编程是一种非常抽象的JJ乍,需要将现实世界中H勺实体转化为电脑软件。面向对象的
思想规定顾客具有对现实世界中口勺事物进行抽象口勺能力。例如在开发一种生产管理软件时,
所有与生产管理有关对象,包括工人、产品、生产单、异常等,都是一种个H勺对象。那么
在编写C#代码时,应当仔细考虑这些现实世界中的J对象,然后进行分析和对象化。
对象具有属性和措施,以及与这些属性和措施有关联的一系列的事件。例如生产管理
软件中,假如工人是一种对象[I勺话,那么年龄、性别就是工人这个对象口勺属性;可以将二
人工作这个行为当作是工人这个对象H勺措施;到了下班的时间工人要下班,可以将在这人
时间触发的行为称之为事件。
下面的示例将使用微软企业最新的)VisualStudio2023创立一种C#控制台应用程序,
演示怎样使用C#创立一种类,并添加属性和措施。环节如下:
(1)打开VisualStudio2023,选择“文献”I“新建”I“项目”命令,从弹出的窗
口中选择VisualC#|Windows|“控制台应用程序”命令,如图1.6所示。在名称窗口中输
入应用程序的名称为ClassDcmo,指定文献所要保留的途径,单击“确定”按钮,VisualStudio
将自动创立一种控制台应用程序项Fl,并且进入到代码录入窗口。
U»J
?»»gyyma]|
rkJS2J#存储胃3口
CPBMItt
KflViMdCt
Vl*«dCt
SVindC4用于tut•乡5&M&/WM日
"UM.
YindC«
,•b
胤“△«・
VmdCt
QT
l4f“Q・》<
VindC«
图Skv«F*iM
S«l«wr)>cM
YUC«
KF
Vcrkflc*
ViMdCt
*U
囹X电M
ViwalCt
ax^nnafl
aKffX
Virtdc«
<ww口
•wx9n
VindCl
VirtUC«
|C«»v>l«iA991icttital
[y\Sy«rE3W*Ugin3\Sycy“\a«0XDoI
旦
"MSRSwwS5i-
~「力・芭方案g口奈心)
rgMtaHHE%
图1.6新建控制台应用程序
(2)在代码输入彷L中编写一种名为WorkerH勺类,表达一种生产管理系统中的_L人,
他具有姓名、性别、年龄属性和一种名为Working。的J措施,如代码1.1所示。
代码1.1Worker类定义代码
///〈summary〉
///生产管理系统中的工人类
///</summary>
publicclassWorker
(
publiceventEventHandler<EventArgs>OffWork;〃下班事件
publicstringName{get;set;}//姓名
publicintAge{get;set;}//年龄
publicboolIsBoy{get;set;}//与否男生
publicvoidWorking()〃正在工作的措施
(
Console.WriteLine(:{0},性别{1},年龄{2}正在工作中..”,Name,IsBoy,Age);
if(DateTime.Now.Hour==14)〃假如是下午2点,则提醒已下班
(
if(OffWork!=null)〃要判断该事件与否被赋值
(
OffWork(thisznewEventArgs());//调用下班事件处理代码
)
}
}
}
在上面的代码中,使用了C#3.0以来的属性简化语法来定义了3个属性,使用泛型的
EventHandler定义了一种事件句柄。Working事件中首先在控制台窗口中打印一行Worker
类目前H勺属性信息,然后在目前时间为14时触发OtfWork事件,假如目前时间是下午2
点时,将触发顾客定义的一段事件处理代码。
(3)在控制台的主应用程序中编写代码实例化这个Worker类,然后设置这个Work类
附属性,并调用Worker类的措施,如代码L2所示。
代码1.2实例化Worker类代码
classProgram
staticvoidMain(string[]args)
Workerworker=newWorker();//实例化一种Worker类
worker.Name="一利工।It”;〃设置姓名属性
worker.Age=18;//设置年龄属性
worker.IsBoy=true;〃设置性别属性
worker.OffWork+=//关联一种下班口勺事件处理代码
newEventHandler<EventArgs>(worker_OffWork);
worker.Working();//调用类的措施
Console.ReadLine();//暂停屏幕关闭
//员工下班的事件处理代码
staticvoidworker_OffWork(objectsender,EventArgse)
Console.WriteLine("该员工到点己F班了!”);
代码1.2使用new语法创立了一种生产工人,然后指定工人H勺姓名、性别和年龄,为
,人卜班事件关联了一种名为worker_OffWork()H勺措施,最终调用Working类措施启动员
工工作。
程序运行效果如图1.7所示。在将目前系统时间调到下午2点多后来,控制面板窗口
中会显示出该员工已经下班的信息。
,file:///F:/Iywritinsbook/CtA£S^£&i/SourceCode/Chpl/ClaxsDeBo/Clasx__
该员工到点已下班了,
图1.7对象示例运行效果
本节只能对C#面向对象的知识进行简朴简介,完整简介面向对象的理论和C#进行面
向对象的编程需要诸多篇幅,读者可以参照某些专门简介面向对象H勺书籍。
1.3.2强数据类型
强数据类型是指必须为变量指定一种数据类型,c#自身是一门类型安全的j编程语言,
类型访问必须根据所指定的数据类型来访问,例如将一种字符串类型当作一种整数类型天
访问是不被容许的。
C#自身支持静态类型检查,因此在编译时强制类型安全,.NET口勺通用语言运行时将
强制执行动态类型安全检查,以便在程序运行前就能消除类型转换的错误。VisualStudio
的智能提醒功能,可以通过静态类型检查发现错误口勺类型操作。如图1.8所示,当为一种
整型赋一种字符串时会提醒类型不能对H勺转换。
由于C#[l勺类型规则非常口勺严格,虽然将一种浮点数传递给一种接受整型口勺函数,假如
不进行强制类型口勺转换,也将会出现错误。使用强类型H勺这种特性,可以使C#代码运行在
一种安全的、受控的环境中不至于被其他方面破坏。
图1.8VisualStudio2023类型检查提醒
1.3.3动态类型绑定
动态绑定是C#4.0中非常重大的创新,它的出现类似于在C#2.0中的泛型同样。动态
绑定B'J灵感来源于某些如Python、Ruby、JavaScripl和Smalltalk等动态语言。动态绑定时
定义是:将解析类型和组员H勺过程由编译时延迟到运行时。
C#是一种强数据类型的语言,因此在编译时已经决定了其数据类型,即便是使用Var
关键字的隐式类型中明,在编译时仍然会变成确切H勺类型。而动态绑定申明是指在编译时
并不懂得它引用对象确实切类型,在运行时才懂得。
下面新建一种控制台应用程序名为DynamicBindingDemo,编写动态绑定口勺代码见代
码1.3o
代码1.3动态绑定示例代码
classProgram
staticvoidMain(string(]args)
dynamicobj=newDynTypeObject();//定义动态对象
obj.Working();//调用动态措施
obj.WorkingOthers();
Console.ReadLine();//暂停控制台屏幕
}
)
publicclassDynTypeObject:Dynamicobject//创立一种动态绑定对象
(
//重载调用组员措施
publicoverrideboolTrylnvokeMember(InvokeMemberBinderbinder,
object[]args,outobjectresult)
{
Console.WriteLine(binder.Name+”措施正在调用“);//在控制台显示信息
result=null;
returntrue;//返回布尔值
}
)
在上面的代码中,DynTypeObject对象是一种动态绑定的对象“可以看到,Working!')
和WorkingOlhers。实际上并没有进行定义,不过在运行时可以看到这两个措施被成功调
用,如图1.9所示。
图1.9动态措施调用
以老式的I眼光来看,DynTypeObject是一种派生自DynamicObject的I一般的I类。它并
没有定义Working和WorkingOthers措施。假如不是派生自Dynamicobject,运行这段代码
将会产生异常。这是由于.NET是强数据类型的,而Dynamicobject使得调用在运行时动态
的产生,因此输出了如图1.9所示的成果。
1.3.4泛型类型日勺协变(covariant)和逆变(contravariant)
在.NET4.0之前的版本中,泛型类型是不支持协变和逆变的,不过委托类型的参数是
支持协变和逆变的。什么是协变和逆变呢?在编程语言中,“协变”是指可以使用与原始
指定的派生类型相比派生程度更大FI勺类型;“逆变”则是指可以使用派牛.程度更小H勺类型。
下面的代码很好地演示了委托类型的协变。假定有一种类Animals,从其派生出一种
子类Dogs,那么当定义一种委托,该委托返回Animalso顾客也可以将一种返回Dogs的
委托赋值给该委托,称之为协变,见代码1.4o
代码1.4委托的协变
classProgram
{
publicdelegateAnimalsHandlerMethod();//返1HlAnimalsI为委托
publicstaticAnimalsFirstHandler()//返回AnimalsaJ措施实现
(
Console.WriteLine("返回Animals的委托”);
returnnull;
}
publicstaticDogsSecondhandler()//返回Dogs的措施实现
(
Console.WriteLine("返回Dogs的委托”);
returnnull;
}
staticvoidMain(string[]args)
HandlerMethodhandlerl=FirstHandler;//原则委托
HandlerMethodhandler2=Secondhandler;//委托协变
)
}
//定义一种Animals的J类
publicclassAnimals
{
publicstringLocation(get;set;)
)
//定义一种派生自Animals的Dogs类
publicclassDogs:Animals
{
publicstringCry{get;set;}
)
在上面的代码中,首先定义了Animals类和Dogs类,然后定义了一种名为
HandlerMethod口勺委托,该委托返回Animals类型【1勺佰。在Main。措施中,分别赋给一种返
同Animals类型时值和一种返回Dogs类型值的措施。可以看到,由于委托的协变特性,使
得本来返回一种Animals的委托可以接受一种返回Dogs的委托。
^£14.0引入了诂/0111参数,使泛型类型H勺协变和逆变得以实现。例如定义一种泛理
接口或者是泛型委托,可以使用。ut关键字,将泛型类型参数申明为协变。协变类型必须
满足条件:类型仅用作接口措施H勺返回类型,不用作措施参数口勺类型。
可以使用in关键字,将泛型类型参数申明为逆变。逆变类型只能用作措施参数日勺类型,
不能用作接口措施H勺返回类型。逆变类型还可用于泛型约束。下面的示例演示了怎样使月
in/out参数来设置泛型类型的J协变和逆变。协变日勺使用见代码1.5o
代码1.5泛型的协变
interfaceITest<outT>//定义一种支持协变的接口
(
TX{get;}//属性
TM();//返回T类型的措施
)
//定义一种实现接口的泛型类
classTestClass<T>:ITest<T>
whereT:Base,new()//约束T要派生自Base,具有构造函数
(
publicTX{get;set;}
〃实现泛型措施
publicTM()
{
returnnewT();
)
}
//定义两个类
classBase{}
classDerived:Base(}
classProgram
{
staticvoidMain(string(]args)
(
ITest<Derived>derived=
newTestClass<Derived>{X=newDerived()};
〃使用对象初始化语法赋初值
ITest<Base>base=derived;〃泛型协变
Basex=_base.X;
Basem=_base.M();
)
)
在上面的代码中,定义了一种泛型接口ITesl,注意使用了。Ut参数以支持协变。然后
TestClass泛型类实现了接口,并且定义了泛型约束指定T类型必须是派生自Base类的子
类。可以看到在Main主窗体中,定义了一种ITest的I接口,然后运用泛型的协变特性来进
行泛型类型之间的变换。
与协变相反的I是,逆变是将基类转换为派生类,泛型逆变有如下两条规则:
□泛型参数受in关键字约束,只能用于属性设置或委托(措施)参数。
□隐式转换目的的泛型参数类型必须是目前类型的“继承类”。
例如,代码1.6定义了一种接口,演示了哪些是容许协变,哪些是容许逆变的J。
代码1.6接口的逆变
interfaceITest<inT>
{
TX
{
get;//获取属性不容许逆变
set;//设置属性容许逆变!
)
TM(To);//只容许措施参数,不能作用于措施返回值
}
与协变相反,逆变符合多态性的规律,逆变有些令人费解,不过逆变重要是为泛型委
托准备H勺。逆变的使用如代码1.7所示。
代码1.7委托的逆变
classProgram
(
staticvoidMain(string1]args)
{
Action<Base>_base=(o)=>Console.WriteLine(o);//J£jZ,一种Base基类
Action<Derived>_derived=_base;〃使用协变将基类转换为派生类
.derived(newDerived());//逆变的效果
)
}
以上代码中创立了一种委托,是基于Base类,不过在背面口勺赋值语句中,将基类赋给
派生类,形成了逆变。
命名参数和可选参数
C#4.0新增口勺功能在MSDN中有详细简介,本书不再一一简介。本节将简介命名参数
和可选参数。
□命名参数容许一种函数调用者通过名称,而不是参数所在的位置来标识一种参数。
□可选参数容许函数指定一种默认值,这样调用方在调用时可以省略默认值。
命名参数语法示例如代码1.8所示。
代码1.8委托的逆变
classProgram
(
staticvoidMain(string[]args)
{
NamedParametersiPl:“命名1“,P2:“命名2“,P3:“命名3”);
//使用命名参数语法
}
staticvoidNamedParameters(stringPlzstringP2,stringP3)//自定义函数
(
Console.WriteLineC^^t1:{0},^^2{2}M,Pl,P2,P3);
)
}
可以看到,命名参数命名H'、J方式指定参数,不用关注参数的位置,并且VisualStudio
2023还提供了参数提醒功能。
可选参数欧I示例如代码1.9所示。
代码1.9委托的逆变
//定义一种带有可选参数的参数,指定默认值
staticvoidShov/Text(springtext="这是默认的文本”)
(
Console.WriteLine(text);
}
staticvoidMain(string[]args)
(
ShowTextO;//调用时不传递参数,将使用默认参数
Console.Read();
}
可以看到,在定义函数时指定了参数的默认值,在调用时可以不指定参数,将会便月
默认的参数进行替代。
本节简介了某些C#4.()新增的特性。当然C#新增口勺功能尚有诸多,有爱好的读者可以
参照MSDN中的内容。下面一节将讨论怎样使用全新的VisualStudio2023集成化开发环境。
1.4使用VisualStudio2023集成化开发环境
VisualStudio2023是微软企业集成化开发环境的最新版本,微软•共公布了如下4人
版本於JVisualStudio2023。
□2023Professional专业版:合用于个人执行基本开发任务。
□2023Premium企业版:合用于个人和团体开发可扩展的高质量的应用程序。
□2023Ultimate旗舰版:ALM工具合用于团体,可保证从设计到布署均获得高质
量成果。
□TestProfessional2023测试人员版:合用于QA团体专业工具集,可简化测试规
划和手动测试执行。
VisualStudio2023的顾客界面与此前版本相比有了相称明显口勺改善。微软使用WPF
技术进行UI开发,无论在响应还是外观来说都愈加吸引人,大大增强了顾客的使用舒适性。
1.4.1VisualStudio2023的新增特性
与之前的版本相比较,VisualStudio2023在许多方面都得到了增强,例如WPF设计
器、智能提醒、代码高亮、可视化类设计器等。其中某些独特的特性如下。
□可视化B、JXML编辑器及设计器;
□支持Windows移动开发;
□支持Office开发;
□为WindowsWorkflowFoundation项目提供/设计时的支持;
□整合支持的代码重构:
□可视化的类设计工具。
1.4.2开始页面
每次启动VisualStudio2023,都会打开开始页面。该页面是一种WPF版的文献,乜
可以自行订制这个页面,如图1.行所示。
图1.1()VisualStudio2023开始页面
窗口右上侧是打开或新建项目
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 漆器制作工保密竞赛考核试卷含答案
- 装裱师安全检查模拟考核试卷含答案
- 电力电容器及其装置制造工安全意识测试考核试卷含答案
- 微创手术后脑出血患者的安全护理
- 急诊科护理团队建设与管理
- 莱州湾海域空间开发利用:格局剖析与强度评估
- 药艾条灸在化疗所致恶心呕吐治疗中的应用与机制探究
- 荧光硅纳米颗粒在实时荧光生物成像中的应用与前景探究
- 荒漠草原白刺灌丛堆演变对土壤微生物群落的影响探究
- 荆条开花生物学特性与交配系统:生态适应与繁殖策略的深度解析
- 医院网络信息安全ppt
- 广东省普通高中学生档案
- 安徽汇宇能源发展有限公司25万吨年石脑油芳构化项目环境影响报告书
- 建筑工程项目汇报ppt
- 人教版一年级数学下册《第8单元 总复习 第1节 数与代数》课堂教学课件PPT小学公开课
- 火力发电厂金属技术监督规程解读
- 特种加工技术课件第11章 高压水射流加工
- YS/T 96-2009散装浮选铜精矿中金、银分析取制样方法
- 最新人教部编版六年级下册语文《古诗词诵读:春夜喜雨》教学课件
- 超市经营服务投标方案
- 高血压中医健康教育专家讲座
评论
0/150
提交评论