




已阅读5页,还剩58页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LetsTalkAbout.NET,欧美事业部曹盛,目录,1.反射2.委托3.事件各版本之间的区别4.1.NETFramework1.14.2.NETFramework2.04.3.NETFramework3.04.4.NETFramework3.54.5.NETFramework3.5SP14.6.NETFramework4.0,反射,反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型的成员,包括方法、属性、事件,以及构造函数等。应用程序结构分为应用程序域程序集模块类型成员几个层次,公共语言运行库加载器管理应用程序域,这种管理包括将每个程序集加载到相应的应用程序域以及控制每个程序集中类型层次结构的内存布局。程序集包含模块,而模块包含类型,类型又包含成员,反射则提供了封装程序集、模块和类型的对象。,反射获取和加载程序集System.Reflection.Assembly,使用反射来获取程序集常用的有以下几种方法:获取AppDomain中包含的所有程序集调用AppDomain类的属性currentDomain的GetAssemblies方法将返回一个由System.Reflection.Assembly元素组成的数组,示例如下:foreach(AssemblyasseminAppdomain.currentDomain.GetAssemblies()加载单个程序集,System.Reflecton.Assembly类型为加载一个程序集,提供了以下方法:Load方法:例如:AssemblyaAssembly=System.Reflecton.Assembly.Load(PetShop.SQLServerDAL);LoadFrom方法:例如:Assemblya=System.Reflecton.Assembly.LoadFrom(ReflectSample.exe);,反射获取类型System.Type,使用反射来获取类型常用的有以下几种方法:使用typeof运算符获取类型的System.Type对象,如:System.Typetype=typeof(int);System.Typetype=typeof(HelloWorld);/HelloWorld是自定义的类名通过类型实例,使用方法GetType获取类型的System.Type对象,如:intintA=10;System.Typetype=intA.GetType();获取程序集所包含的所有类型使用程序集实例的GetTypes方法可以获取程序集所包含的所有类型,如:Assemblya=Assembly.LoadFrom(ReflectSample.exe);Typemytypes=a.GetTypes();/从程序集获取所有数据类型,反射创建类型的成员,以下介绍几个用于类型成员的类:ConstructorInfo类用于类型的构造函数,使用ConstructorInfo可以获取以下信息:构造函数的名称、参数、访问修饰符和实现详细信息等。使用Type的GetConstructors或GetConstructor方法来创建特定的构造函数ConstructorInfo对象。ConstructorInfop=typeof(t).GetConstructors();for(inti=0;ip.Length;i+)Console.WriteLine(pi.IsStatic);MethodInfo类用于类型的方法成员,使用MethodInfo获取以下信息:方法的名称、返回类型、参数、访问修饰符和实现详细信息等。使用Type的GetMethods或GetMethod方法来获取MethodInfo对象。,反射创建类型的成员,使用FieldInfo获取以下信息:字段的名称、访问修饰符和实现详细信息等;并获取或设置字段值。使用Type的GetField等方法来获取FieldInfo对象。使用EventInfo获取以下信息:事件的名称、事件处理程序数据类型、自定义属性、声明类型和反射类型等;并添加或移除事件处理程序。使用Type的GetEvent等方法来获取EventInfo对象。使用PropertyInfo获取以下信息:属性的名称、数据类型、声明类型、反射类型和只读或可写状态等;并获取或设置属性值。使用Type的GetProperty等方法来获取PropertyInfo对象。,反射创建类型的实例,通过反射创建类型的实例常用的有以下几种方法:使用System.Activator的CreateInstance方法创建类型的实例。例如:Objectobj=Activator.CreateInstance(type);/type是一个类型对象Assembly对象的CreateInstance实例方法,如:PetShop.IDAL.IproductmyProduct=(PetShop.IDAL.IProduct)aAssembly.CreateInstance(PetShop.SQLServerDAL.Product);可以将反射程序集与创建类型的实例合并如下,这是常用的方法,代码如下:PetShop.IDAL.IproductmyProduct=(PetShop.IDAL.IProduct)Assembly.Load(PetShop.SQLServerDAL).CreateInstance(PetShop.SQLServerDAL.Product);,反射调用类型实例的方法,使用反射调用类型实例的方法有以下几种方式:使用System.type的对象t调用InvokeMember方法来调用一个类型的实例方法。如:Strings=(String)t.InvokeMember(ToString,BindingFlags.DeclaredOnly|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Instance|BindingFlags.InvokeMethod,null,obj,null);使用System.reflection.MethodInfo的Invoke方法来调用一个类型的实例方法。如:MethodInfomsayhello=ht.GetMethod(SayHello);/获取SayHello方法msayhello.Invoke(obj,null);/调用HelloWorld实例obj的SayHello方法,委托,委托委托技术是.NET引入的一种重要技术,使用委托可以实现对象行为的动态绑定,从而提高设计的灵活性。.NET运行库支持称为“委托”的引用类型,其作用类似于C+中的函数指针。所有委托都从System.Delegate继承而来并且有一个调用列表,这是在调用委托时所执行方法的一个链接列表。可以使用的委托Cimbine及Remove方法在其调用列表中添加和移除方法。若要调用委托,可使用Invoke方法,或者使用BeginInvoke和EndInvoke方法异步调用委托。委托类的实现由运行库提供,而不由用户代码提供。,委托,委托适用于那种在某些语言中需要用函数指针来解决的情况,但是与函数指针不同,它是面向对象和类型安全的。委托声明定义一个类,它是从System.Delegate类派生的类。委托实例封装了一个调用列表,其中列出了一个或多个方法,每个方法称为一个可调用实体。委托实例的一个有用的属性是它既不知道,也不关心其封装方法所属类的详细信息,对它来说最重要的是这些方法与该委托的类型兼容。定义和使用委托分为声明、实例化和调用3个步骤。,.NET委托声明及特点,1)通用事件处理者委托delegatevoidEventHandler(objectsender,EventArgse)2)计算1k+2k+nk的委托delegateintPowerSum(intn)3)特点:不需要定义成员4)基类:MulticastDelegate、Delegate,委托应用:函数回调(Callback),定时器类型System.Threading.Timer()System.Threading.TimerCallback(objectobj)/委托定时回调TimerCallbackcb=newTimeCallback(TimeClick);Timertimer=newTimer(cb,null,0,500);voidTimeClick(objectstate)Console.WriteLine(“timeclick”);,匿名委托、委托推断与泛型委托,匿名委托:在委托()中内联方式创建方法TimerCallBackcb=newTimerCallback(delegate(objectstate)Console.WriteLine(“timeclick”););委托推断:不创建委托对象,直接调用函数泛型委托:委托是类,同样可以有泛型,事件,事件事件是类在发生其关注的事情时用来提供通知的一种方式。事件具有以下特点:事件是用来通知对象需要执行某种操作的方式。事件通常用在图形用户界面中。事件通常使用委托事件处理程序进行声明。事件可以调用匿名方法来替代委托。,使用事件,使用事件步骤是:声明事件委托类型定义、引发事件类定义和接受事件类订阅事件。声明事件委托类型事件和方法一样具有签名,签名包括名称和参数列表。事件的签名通过委托类型来定义,因此首先为事件声明一个委托,如:publicdelegatevoidChangedEventHandler(objectsender,EventArgse);在事件发送类中添加事件,需要使用event关键字,并提供委托类型和事件名称。例如:publiceventChangedEventHandlerChanged;,使用事件,引发事件类定义若要引发事件,类可以调用委托,并传递所有与事件有关的参数。然后,委托调用已添加到该事件的所有处理程序。例如下面代码中:Changed(this,e);,使用事件,publicclassListWithChangedEvent:ArrayList/一个每次列表更改时发送通知的类/事件,每当列表元素更改时,客户端可利用该事件获得通知。publiceventChangedEventHandlerChanged;protectedvirtualvoidOnChanged(EventArgse)/每当列表更改时调用Changed事件if(Changed!=null)/确保该事件不为空Changed(this,e);/调用Changed事件/重写可更改列表的Add方法;在每个重写后调用事件publicoverrideintAdd(objectvalue)inti=base.Add(value);/调用基类ArrayList的Add方法OnChanged(EventArgs.Empty);/触发Changed事件returni;,订阅事件,classEventListenerprivateListWithChangedEventList;publicEventListener(ListWithChangedEventlist)List=list;/将“ListChanged”添加到“List”中的Changed事件。List.Changed+=newChangedEventHandler(ListChanged);/每当列表更改时就会进行以下调用。privatevoidListChanged(objectsender,EventArgse)Console.WriteLine(事件触发);publicvoidDetach()/分离事件并删除列表List.Changed-=newChangedEventHandler(ListChanged);List=null;,使用事件,在类Test主函数Main()中创建引发事件类实例和接受事件类实例,代码如下:classTest/测试ListWithChangedEvent类。publicstaticvoidMain()/创建新列表,引发事件类实例。ListWithChangedEventlist=newListWithChangedEvent();/创建一个类,用于侦听列表的更改事件。EventListenerlistener=newEventListener(list);list.Add(item1);/在列表中添加项。触发事件显示事件触发listener.Detach();/分离事件,之后不再处理事件.list.Add(item2);/在列表中添加项。不显示事件触发,.net各版本之间的区别,1.01.1安全方面的升级;自带对ODBCOracle的支持;支持Ipv61.12.0非.net应用程序可管理.net应用实例大量API升级2.03.0WPFWCF(SOA支持的安全的WebService框架)WFCardSpace(SSO),.net各版本之间的区别II,3.03.5添加LINQ支持(用c#或者VB使用相同语法查询DB/XML)利用ASP.netAjax创建更丰富的web交互用于生成WCF服务的全新Web协议支持(Ajaxjsonetc.)类库中升级新类3.53.5SP1(重要升级)ASP.NET动态数据和Ajax附加功能对SQLServer2008的数据提供程序支持改进WPF性能改进WCF相互操作性支持4.0主要是增加了并行开发的支持,提供了独立安全的企业开发平台,版本关系图,版本解析,根据版本的发布情况可得:.NETFramework3.5=3.0+3.0sp1.NETFramework3.0=2.0+2.0sp1+WPF+WCF+WF.NETFramework1.01.12.0彼此完全独立对于其中的任何一个版本来说,无论是否安装其他版本,自己都可以独立的存在兼容性具有高度的向后兼容性支持只有1.1版本向后先前兼容,2.0版本不向前兼容对于提高安全性、功能性的更改也可能会引发兼容问题,.NETFramework1.1版本,1、ASP.NET移动控件2、ADO.NET的改动添加System.Data.Odbc命名空间新增System.Data.OracleClient命名空间供Oracle使用DataReader对象公开HasRows属性,判断是否有返回行Connection对象具有EnlistDistributedTransaction,可以在分布式事务中启动手动登记。3、并发执行.NETFramework1.1版本支持并行执行。4、.NETFramework安全性的改动5、.NETFramework中的IPv6支持,.NETFramework2.0版本,-公共语言运行库(CLR)。-对泛型类型和方法的支持。-基类库-ADO.NET-ASP.NET-windows窗体-Web服务-C#、VisualBasic、C+和J#的编译器-64位平台支持-访问控制列表支持-缓存的编程空间-FTP支持,CLR,CLR(公共语言运行库)和java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。CLR将监视形形色色的常见编程错误,许多年来这些错误一直是软件故障的主要根源,其中包括:访问数组元素越界,访问未分配的内存空间,由于数据体积过大而导致的内存溢出,等等。,对泛型类型和方法的支持,通过参数化类型来实现在同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。类型参数使得类和方法将一个或多个类型的指定推迟到声明并实例化该类或方法的时候。,泛型,classMyStackprivateTstore;privateintsize;publicMyStack()store=newT10;size=0;publicvoidPush(Tx)storesize+=x;publicTPop()returnstore-size;classTeststaticpublicvoidMain()MyStackx=newMyStack();x.Push(17);,泛型概述,泛型的主要特点:使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。泛型最常见的用途是创建集合类。.NET框架类库的System.Collections.Generic命名空间包含新的泛型集合类如List泛型类。可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。关于泛型数据类型中使用的类型的信息可在运行时通过反射获取。,基类库,BCL(基类库)代表了.NET框架的核心。不管人们开发何种应用程序,BCL总是作为构建其他所有功能的起点。核心基类库的作用是完成框架的通用性开发而必须的基础类和常用工具类等,包含有:Think.Core核心类库包;Think.Db数据库类库包;Think.Exception异常处理类库包;Think.Template内置模板引擎类库包;Think.Util系统工具类库包。,ADO.NET,ADO.NET是一组用于和数据源进行交互的面向对象类库。ADO.NET允许和不同类型的数据源以及数据库进行交互。在ASP.NET应用程序中可以使用ADO.NET来连接到这些数据源,并实现数据的检索、添加、更新和删除。,ADO.NET对象模型,ADO.NET对象模型,.NETFramework数据提供程序的核心对象,DataSet,使用ADO.NET访问数据,DataSet对象模型,DataSet对象是支持ADO.NET的断开式、分布式数据方案的核心对象。它可以用于多个不同的数据源,可以用于XML数据,也可以用于管理应用程序本地的数据。DataSet表示包括相关表、约束和表间关系在内的整个数据集。下图描述了DataSet对象模型。,Connection对象概述,在ADO.NET中,使用以下Connection对象来创建和管理数据库连接。SqlConnection:用于管理与SQLServer7.0版或更高版本的连接。OleDbConnection:用于管理与可通过OLEDB访问的任何数据存储区的连接。OdbcConnection:用于管理与通过使用连接字符串或ODBC数据源名称(DSN)创建的数据源的连接。OracleConnection:用于管理与Oracle数据库的连接。接Access数据库:OleDbConnectionobjConnection=newOleDbConnection(strConnection);连接SQLServer数据库:SqlConnectionobjConnection=newSqlConnection(strConnection);其中参数cnectionString给出用于打开数据库的连接字符串。若未指定该参数,则必须首先设置Connection对象的ConnectionString属性,然后才能打开数据连接。,Command对象概述,Command类的构造函数:SqlCommandmyCommand=newSqlCommand(cmdText,conn)myOleDbCommandmyCommand=newOleDbCommand(cmdText,conn)其中参数cmdText给出查询的文本。conn指定一个Connection对象,表示与指定数据库的连接。Command对象的常用属性CommandTextCommandTimeoutCommandTypeConnectionParametersTransactionUpdatedRowSourceCommand对象的常用方法Cancel()CreateParameter()ExecuteReader()ExecuteScalar()Prepare()ResetCommandTimeout()ExecuteNonQuery在VisualStudio.NET中,可以使用Command控件来创建命令对象,使用DataReader对象读取数据,创建DataReader对象SqlDataReaderreader=cmd.ExecuteReader();OleDbDataReaderreader=cmd.ExecuteReader();DataReader对象的常用属性FieldCountHasRowsIsClosedItem(index,name)RecordsAffectedDataReader对象的常用方法Close()GetBoolean(ordinal)GetDataTypeName(index)GetFieldType(index)GetName(index)GetOrdinal(name)GetSchemaTable()GetValue(ordinal)GetValues(values)IsDBNull(ordinal)NextResult()Read(),DataAdapter对象模型,使用DataAdapter对象访问数据,DataAdapter类的构造函数SqlDataAdaptersda=newSqlDataAdapter()OleDbDataAdapterthisAdapter=newOleDbDataAdapter(selectCommandText,_selectConnection);DataAdapter对象的主要属性DeleteCommandInsertCommandSelectCommandUpdateCommandDataAdapter对象的常用方法Dispose()Fill(dataSet,srcTable)DataAdapter的主要事件FillErrorRowUpdatedRowUpdating,ASP.NET,ASP是一项微软公司的技术,是一种使嵌入网页中的脚本可由因特网服务器执行的服务器端脚本技术。通用语言的基本库,消息机制,数据接口的处理都能无缝的整合到ASP.net的Web应用中。ASP.NET是一个已编译的、基于.NET的环境,把基于通用语言的程序在服务器上运行。将程序在服务器端首次运行时进行编译,且可以用任何与.NET兼容的语言(包括VB.NET、C#和JScript.NET.)创作应用程序。ASP.NET可以无缝地与WYSIWYGHTML编译器和其他编程工具一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点。,windows窗体,简单来说:winforms和的脚本都是基与c#winforms是做客户端软件,是基与网络开发的VisualC#是微软公司.NetFrameWork框架中的一个重要组成部分,也是微软公司极力推荐的新一代程序开发语言。.Net为开发WinForm的应用程序提供了丰富的ClassLibrary(类库)。,创建WinForms应用程序,基础核心命名空间,提供了大量绘图工具的访问权限,ArrayList、BitArray、Hashtable、Stack、StringCollection和StringTable类,usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;namespaceWindowsApplication3publicpartialclassForm1:FormpublicForm1()InitializeComponent();,提供了大量绘图工具的访问权限,基础核心命名空间,ArrayList、BitArray、Hashtable、Stack、StringCollection和StringTable类,大量窗体和控件,从System.Windows.Forms.Form派生,VisualStudio.NET生成的代码,创建WinForms应用程序,partialclassForm1/必需的设计器变量。/privateSystem.ComponentModel.IContainercomponents=null;,构造函数调用InitializeComponent()方法,#regionWindows窗体设计器生成的代码/设计器支持所需的方法-不要/使用代码编辑器修改此方法的内容。/privatevoidInitializeComponent()this.SuspendLayout();/Form1/this.AutoScaleDimensions=newSystem.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=newSystem.Drawing.Size(333,266);this.Name=Form1;this.Text=Form1;this.ResumeLayout(false);#endregion,项目的容器,创建WinForms应用程序,/清理所有正在使用的资源。/如果应释放托管资源,为true;否则为tectedoverridevoidDispose(booldisposing)if(disposing,释放系统资源,创建WinForms应用程序,staticclassProgram/应用程序的主入口点。/STAThreadstaticvoidMain()Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(newForm1();,程序的主入口点,Web服务,WebService是微软主推的一种跨平台的分布式应用程序。他使用SOAP协议通讯,用XML封装数据,所以是跨平台的。任何客户端只要按照WebService发布的格式发送数据就都可以得到结果。,WebService的特点,WebService可看成是一个可复用的Web应用程序组件WebService是平台无关的WebService是自说明的可以使用一种统一的机制来在互联网上查找WebService,WebService到底是如何“转”起来的?,WebService驻留于WebServer中使用UDDI机制查找符合要求的WebService网络中的机器通过SOAP协议进行通讯,使用WebService,跨网络调用WebService的内部机理,所有这些工作,VisualStudio已帮助人们完成。,.NETFramework3.0,windowsPresentationFoundation(WPF)。提供更佳的用户体验,用来开发WindowsForms程序以及流览器应用程序windowsCommunicationsFoundation(WCF)。提供SOA(面向服务的软件构架)支持的安全的网络服务(WebService)框架。windowsWorkflowFoundation(WF)。提供一个设计与发展工作流程导向(Workflow-oriented)应用程序基础支持的应用程序接口。,.NETFramework3.5,1、Ajax的支持ScriptManager控件和UpdatePanel控件.NETFramework3.5改进了对支持AJAX的网站的开发支持。ASP.NET支持使用一组新的服务器控件和API进行以服务器为中心的AJAX开发。(API)MicrosoftAjaxLibraryASP.NET还支持使用名为MicrosoftAJAXLibrary的新客户端库进行以客户端为中心的AJAX开发。,.NETFramework3.5,2、LINQ提供
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村盖房签合同范本
- 乡镇库房建造合同范本
- 创业老板合同范本
- 1997施工合同范本
- 公司购买材料合同范本
- 保险劳务合同范本
- mpp管采购合同范本
- app广告合同范本
- 加盟痘痘合同范本
- 住房公证合同范本
- 中医小儿常见皮肤病
- 第十七届山东省职业院校技能大赛机器人系统集成应用技术样题1学生赛
- 血管通路的介入治疗
- 临床三基考试题库(附答案)
- 2024年浙江省杭州市拱墅区中考语文一模试卷
- 无人售货机的食品安全管理制度
- 校园直饮水机供货安装及售后服务方案
- 个人保证无纠纷承诺保证书
- DB51T10009-2024DB50T10009-2024康养度假气候类型划分
- 华文版六年级下册书法教案
- 生产安全重大事故隐患检查表(根据住建部房屋市政工程生产安全重大事故隐患判定标准(2022版)编制)
评论
0/150
提交评论