NET程序设计PPT课件

上传人:沈*** 文档编号:182720602 上传时间:2023-01-27 格式:PPT 页数:244 大小:981.50KB
收藏 版权申诉 举报 下载
NET程序设计PPT课件_第1页
第1页 / 共244页
NET程序设计PPT课件_第2页
第2页 / 共244页
NET程序设计PPT课件_第3页
第3页 / 共244页
资源描述:

《NET程序设计PPT课件》由会员分享,可在线阅读,更多相关《NET程序设计PPT课件(244页珍藏版)》请在装配图网上搜索。

1、.NET 程序设计C#编程语言(3.0)自我介绍n从1994年做管理软件n从2001年使用.NET和C#n主要工作:n俊先管理软件开发平台n.Net软件设计新思维像搭积木一样搭建软件n俊先管理软件开发平台总体架构商务新星.NETnC#源码30万行.NET 的内容nConsolenWindows FormsnADO.NETnASP.NETnWeb ServicenXMLnLINQ(LINQ to object、LINQ to SQL、LINQ to DataSet、LINQ to XML)nWindows Presentation Foundation(WPF)nWindows Communic

2、ation Foundation(WCF)nWindows Workflow Foundation(WF)nWindows CardSpacenSilverlight 3.0 nASP.NET 3.5 ExtensionsnBlendn。C#与.NET的关系Hello World-您的第一个程序 nusing System;n/A Hello World!program in C#nnamespace HelloWorldnn class Hello n n static void Main()n n System.Console.WriteLine(Hello World!);n n nMa

3、in()和命令行参数 nclass CommandLine2nn static void Main(string args)n n System.Console.WriteLine(Number of command line parameters=0,args.Length);n foreach(string s in args)n n System.Console.WriteLine(s);n n nnNumber of command line parameters=3nJohnnPaulnMary类型数据类型n值类型n简单类型n结构类型n枚举类型n引用类型n类n接口n委托(代理)n数组

4、值类型n结构类型:nstruct PhoneBookn n public string name;n public string phone;n public string address;nnPhoneBook pb;npb.name=“wang”;npb.phone=“88102324”;npb.address=“青年大街126号”;值类型n枚举类型:用户定义的整数(int、short、long、byte)nenum WeekDay nSunday,Monday,Tuesday,Wednesday,Thursday,Friday,Satursay;nWeekDay wd;nwd=WeekD

5、ay.Monday;类型转换n隐式数值类型转换:自动转换成高精度的数值nint i=5;nint j=8;nlong=i+j;sbyeshort、int、long、float、double、decimalbyteshort、ushort、int、uint、long、ulong、float、double、decimalshortint、long、float、double、decimalushortint、uint、long、ulong、float、double、decimalintlong、float、double、decimaluintlong、ulong、float、double、decim

6、allongfloat、double、decimalulongfloat、double、decimalfloatdoublecharushort、int、uint、long、ulong、float、double、decimal类型转换n隐式引用类型转换:n任何对象可以转换为objectn派生类(接口)可以转换为父类(接口)n任何数组类型可以转换为System.Arrayn任何委托(代理)类型可以转换为System.Delegaten任何数组类型可以转换为System.ICloneablennull类型可以可以转换为任何引用类型类型转换n显式数值转换nint i=10;nint j=30;nlo

7、ng l=(long)(i+j);nint g=(int)l;装箱(Boxing)与拆箱(Unboxing)n装箱转换(Boxing):把值类型转换为object类型或接口类型nint I=10;nobject obj=i;n拆箱转换(Unboxing):把对象类型或接口类型转换为值类型nint i=10;nobject obj=i;nint j=(int)obj;类型转换类nConvertnSampleCSharpConvertConvert数组n/Single-dimensional arrays.int myArray1=new int 5;nstring myArray2=new st

8、ring6;n/Multidimensional arrays.nint,myArray3=new int4,2;初始化数组 n/Single-dimensional array(numbers).nint n1=new int4 2,4,6,8;nint n2=new int 2,4,6,8;nint n3=2,4,6,8;n/Single-dimensional array(strings).nstring s1=new string3 John,Paul,Mary;nstring s2=new string John,Paul,Mary;nstring s3=John,Paul,Mary

9、;n/Multidimensional array.nint,n4=new int3,2 1,2,3,4,5,6;nint,n5=new int,1,2,3,4,5,6;nint,n6=1,2,3,4,5,6;n/Jagged array.nint n7=new int2 new int 2,4,6,new int 1,3,5,7,9;nint n8=new int new int 2,4,6,new int 1,3,5,7,9;nint n9=new int 2,4,6,new int 1,3,5,7,9;字符串nstring s1=Hello;nstring s2=s1;ns1+=and

10、goodbye.;nConsole.WriteLine(s2);/outputs Hello字符串n原义字符串:原义字符串:符号符号n 符号会告知字符串构造函数忽略转义符和分行符。因此,以下两个字符串是完全相同的:nstring p1=My DocumentsMy Files;nstring p2=My DocumentsMy Files;字符串n访问各个字符访问各个字符nstring s4=Hello,World;nchar arr=s4.ToCharArray(0,s4.Length);nforeach(char c in arr)nn System.Console.Write(c);/o

11、utputs Hello,Worldn字符串n将字符串拆分为子字符串将字符串拆分为子字符串 n使用 Split 方法分析字符串nclass TestStringSplitnn static void Main()n n char delimiterChars=,.,:,t;n string text=onettwo three:four,five six seven;n System.Console.WriteLine(Original text:0,text);n string words=text.Split(delimiterChars);n System.Console.WriteLi

12、ne(0 words in text:,words.Length);n foreach(string s in words)n n System.Console.WriteLine(s);n n n字符串nStartsWith()nEndWith()nIndexOf()nTrim()nToLower()nSubstring()n练习n应用这些方法自己做一些小程序字符串nclass StringSearchnn static void Main()n n string str=Extension methods have all the capabilities of regular stati

13、c methods.;n /Write the string and include the quotation marksn System.Console.WriteLine(0,str);n bool test1=str.StartsWith(extension);n System.Console.WriteLine(starts with extension?0,test1);n bool test2=str.StartsWith(extension,System.StringComparison.OrdinalIgnoreCase);n System.Console.WriteLine

14、(starts with extension?0(ignoring case),test2);n bool test3=str.EndsWith(.);n System.Console.WriteLine(ends with.?0,test3);n int first=str.IndexOf(method);n int last=str.LastIndexOf(method);n string str2=str.Substring(first,last-first);n System.Console.WriteLine(between two method words:0,str2);n /K

15、eep the console window open in debug moden System.Console.WriteLine(Press any key to exit.);n System.Console.ReadKey();n n使用正则表达式搜索字符串 nclass TestRegularExpressionsnn static void Main()n n string sentences=n n cow over the moon,n Betsy the Cow,n cowering in the corner,n no match heren ;n string sPat

16、tern=cow;n foreach(string s in sentences)n n System.Console.Write(0,24,s);n if(System.Text.RegularExpressions.Regex.IsMatch(s,sPattern,System.Text.RegularExpressions.RegexOptions.IgnoreCase)n n System.Console.WriteLine(match for 0 found),sPattern);n n elsen n System.Console.WriteLine();n n n n cow o

17、ver the moon (match for cow found)Betsy the Cow (match for cow found)cowering in the corner (match for cow found)no match here变量n变量有7种:n静态变量、实例变量、数组元素、值参数、引用参数、输出参数、局部变量nclass Annpublic static int x;nint y;nVoid F(int v,int a,ref int b,out int c)n int i=1;c=a+b+;nnn其中,x是静态变量,y是实例变量,v0是数组元素,a是值参数,b是引

18、用参数,c是输出参数,i是局部变量。变量的作用范围nVoid Main()nnfor(i=0;i 0;i-)nnint j=30;nConsole.WriteLine(I+j).ToString();nn变量的修饰符npublic:可以在任何地方访问nproteced:可以在所属类及派生类中访问nprivate:只能在所属类中访问运算符(操作符)只读变量与常量n只读变量:只能在声明时或在构造方法中初始化。n常量:只能在声明时初始化。nclass a nnpublic readlony int r=10;nconst int c=90;na()nnr=30;nn特殊运算符(操作符)nis:检查对

19、象是否与特定的类型兼容。nint i=10;nif(i is object)nnConsole.WriteLine(“i 是 object”);n特殊运算符(操作符)nas:转换为指定类型。as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而非引发异常。nint i=10;nobject obj=i as object;特殊运算符(操作符)ntypeof:获取原对象的类型特殊运算符(操作符)nsizeof:用于获取 值类型 的字节大小。控制语句nif语句nswitch语句循环语句nwhile语句ndowhile语句nfor语句nforeach语句foreach语

20、句nforeach循环可以在支持IEnumerable 接口容器中迭代每一个项目nstatic void Main()nnint Ints=1,2,3;nforeach(int temp in Ints)nnConsole.WriteLine(temp.ToString();nn跳转语句ngotonbreakncontinuenreturnfixed 语句nfixed 语句禁止垃圾回收器重定位可移动的变量。fixed 语句只能出现在不安全的上下文中。Fixed 还可用于创建固定大小的缓冲区。nfixed 语句设置指向托管变量的指针并在 statement 执行期间“钉住”该变量。如果没有 fi

21、xed 语句,则指向可移动托管变量的指针的作用很小,因为垃圾回收可能不可预知地重定位变量。C#编译器只允许在 fixed 语句中分配指向托管变量的指针。fixed 语句nclass Pointn n public int x,y;nnclass FixedTest nn unsafe static void SquarePtrParam(int*p)n n *p*=*p;n n unsafe static void Main()n n Point pt=new Point();n pt.x=5;n pt.y=6;n fixed(int*p=&pt.x)n n SquarePtrParam(p)

22、;n n Console.WriteLine(0 1,pt.x,pt.y);n nlock 语句nlock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。nlock 关键字可确保当一个线程位于代码的临界区时,另一个线程不会进入该临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。nSamplesCSharpLockLockObject异常处理语句ntryncatchnfinallynthrow习题n1、使用 I/O 类列出某一目录下的所有文件名,并输出到标准控制台n2、读文本文件(逐行),并输出到标准控制台;新建一个文件并向文

23、件中写入字符串异常处理n在应用程序遇到异常情况(如被零除情况或内存不足警告)时,就会产生异常。n发生异常时,控制流立即跳转到关联的异常处理程序(如果存在)。n如果给定异常没有异常处理程序,则程序将停止执行,并显示一条错误信息。n可能导致异常的操作通过 try 关键字来执行。n异常处理程序是在异常发生时执行的代码块。在 C#中,catch 关键字用于定义异常处理程序。n程序可以使用 throw 关键字显式地引发异常。n异常对象包含有关错误的详细信息,其中包括调用堆栈的状态以及有关错误的文本说明。n即使引发了异常,finally 块中的代码也会执行,从而使程序可以释放资源。异常处理nint top

24、=0,bottom=0,result=0;ntrynn result=top/bottom;nncatch(System.Exception ex)nn System.Console.WriteLine(0 exception caught here.,ex.GetType().ToString();n System.Console.WriteLine(ex.Message);nnfinallynn System.Console.WriteLine(Clean-up code executes here.);nnSystem.Console.WriteLine(Program executio

25、n continues here.);异常处理n在 C#中,程序中的运行时错误使用一种称为“异常”的机制在程序中传播。异常由遇到错误的代码引发,由能够更正错误的代码捕获。异常可由.NET Framework 公共语言运行库(CLR)或由程序中的代码引发。一旦引发了一个异常,这个异常就会在调用堆栈中往上传播,直到找到针对它的 catch 语句。未捕获的异常由系统提供的通用异常处理程序处理,该处理程序会显示一个对话框。n异常由从 Exception 派生的类表示。nprivate static void TestThrow()nn System.ApplicationException ex=n

26、new System.ApplicationException(Demonstration exception in TestThrow();n throw ex;n 异常处理npublic static string GetTxtString(string strFileName)nnFileStream fs=null;nStreamReader sr=null;nstring strLine=;nstring strTxt=;ntrynnfs=new FileStream(strFileName,FileMode.OpenOrCreate,FileAccess.Read);nsr=new

27、 StreamReader(fs);nstrLine=sr.ReadLine();strLine=strLine.Trim();nstrTxt=strLine;nn catch(Exception e)throw e;nfinallynnif(sr!=null)sr.Close();nif(fs!=null)fs.Close();nnnreturn strTxt;n异常处理n引发异常之后,运行库检查当前语句以确定它是否在 try 块中。如果是,则检查与该 try 块关联的任何 catch 块,以确定它们是否能够捕获该异常。Catch 块通常会指定异常类型;如果该 catch 块的类型与异常或其

28、基类的类型相同,则该 catch 块就能够处理该方法。n如果引发异常的语句不在 try 块中,或者包含该语句的 try 块没有匹配的 catch 块,运行库将检查调用方法中是否有 try 语句和 catch 块。运行库将在调用堆栈中向上继续搜索兼容的 catch 块。在找到并执行 catch 块之后,控制权将传递给 catch 块之后的第一个语句。n在执行 catch 块之前,将检查运行库已评估过的 try 块(包括包含兼容的 catch 块的 try 块)中是否有 finally 块。Finally 块允许程序员清理中止的 try 块可能留下的任何不明确状态,或释放任何外部资源而不用等待运行

29、库中的垃圾回收器来终结相关对象。n 异常处理nstatic void TestFinally()nn System.IO.FileStream file=null;n System.IO.FileInfo fileInfo=new System.IO.FileInfo(C:file.txt);n tryn n file=fileInfo.OpenWrite();n file.WriteByte(0 xF);n n finallyn n /Closing the file allows you to reopen it immediately-otherwise IOException is t

30、hrown.n if(file!=null)n n file.Close();n n n tryn n file=fileInfo.OpenWrite();n System.Console.WriteLine(OpenWrite()succeeded);n n catch(System.IO.IOException)n n System.Console.WriteLine(OpenWrite()failed);n n习题n采用读文本文件,捕获异常类nclass Annnclass B:Ann分部类n可以将类、结构或接口的定义拆分到两个或多个源文件中。每个源文件包含类定义的一部分,编译应用程序时

31、将把所有部分组合起来。n若要拆分类定义,请使用 partial 关键字修饰符,如下所示:npublic partial class Employeenn public void DoWork()n n nnpublic partial class Employeenn public void GoToLunch()n n n 分部类n如果将任意部分声明为抽象的,则整个类型都被视为抽象的。如果将任意部分声明为密封的,则整个类型都被视为密封的。如果将任意部分声明为基类型,则整个类型都将继承该类。n指定基类的所有部分必须一致,但忽略基类的部分仍继承该基类型。各个部分可以指定不同的基接口,最终类型将实

32、现所有分部声明所列出的全部接口。在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用。最终类型是所有部分在编译时的组合。分部类n编译时将对分部类型定义的属性进行合并。例如,下面的声明:nSystem.SerializableAttribute npartial class Moon nSystem.ObsoleteAttribute npartial class Moon n等效nSystem.SerializableAttributenSystem.ObsoleteAttributenclass Moon 分部类的限制n要作为同一类型的各个部分的所有分部类型定义都必须使用 par

33、tial 进行修饰。npartial 修饰符只能出现在紧靠关键字 class、struct 或 interface 前面的位置。n分部类型定义中允许使用嵌套的分部类型。n要成为同一类型的各个部分的所有分部类型定义都必须在同一程序集和同一模块(.exe 或.dll 文件)中进行定义。分部定义不能跨越多个模块。n类名和泛型类型参数在所有的分部类型定义中都必须匹配。泛型类型可以是分部的。每个分部声明都必须以相同的顺序使用相同的参数名。n下面的用于分部类型定义中的关键字是可选的,但是如果某关键字出现在一个分部类型定义中,则该关键字不能与在同一类型的其他分部定义中指定的关键字冲突:npublic、pri

34、vate、protected、internal、abstract、sealed n基类nnew 修饰符(嵌套部分)分部类npublic partial class A npublic class A /错误npartial class ClassWithNestedClassnn partial class NestedClass nnpartial class ClassWithNestedClassnn partial class NestedClass n分部类n示例:nSampleCSharpPartialTypes分部方法n分部方法在分部类型的一个部分中定义它的签名,并在该类型的另外

35、一个部分中定义它的实现。npartial class An n partial void OnSomethingHappened(string s);n npartial class An n partial void OnSomethingHappened(String s)n n Console.WriteLine(Something happened:0,s);n n 静态类n类可以声明为static的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。静态类在加载包含该类的程序或命名空间时由.NET Framework 公共语言运行库(CLR)自动加载。n它们仅包含静态

36、成员。n它们不能被实例化。n它们是密封的,因此不可被继承。n它们不能包含实例构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。静态类npublic class Automobilenn public static int NumberOfWheels=4;n public static int SizeOfGasTankn n getn n return 15;n n n public static void Drive()n public static event EventType RunOutOfGas;n /other non-static fields and prop

37、erties.n类的成员n字段(域)n属性n方法(函数)n构造方法和析构方法n索引指示器n操作符n事件字段(域)nclass A nnpublic readonly int x=9;nproteced float y;npublic static string z=“123456789”;npublic string S;n字段(域)n静态字段(域):所有的实例共享n非静态字段(域):每个实例有自己的副本nstatic void Main()nnA a=new A();nA b=new A();nA.z=“abc”;nb.S=A.z;nConsole.WriteLine(b.S);n字段(域)

38、的初始化n对于值类型的字段自动初始化为默认值,对于引用类型的字段自动初始化为null。n对于静态字段,在类加载时初始化;对于非静态字段,在创建实例时初始化。字段(域)的初始化nclass testnnpublic int x=1;npublic int y=x+1;/错误nnclass testnnpublic static int x=1;npublic int y=x+1;/正确n属性定义npublic class class1nnprivate string strvalue=“”;npublic string StrValuenngetnnreturn strvalue;nnsetnn

39、If(value!=null)nnstrvalue=value;nnnn存取属性nstatic void Main()nnClass1 c1=new Class1();nc1.StrValue=12345;nstring b=c1.StrValue;nConsole.WriteLine(b);n属性修饰符npublic:可以在任何地方访问nproteced:可以在所属类及派生类中访问nprivate:只能在所属类中访问nstatic:静态属性只能访问类的静态成员nvirtual、override、abstract非对称访问器可访问性n属性或索引器的 get 和 set 部分称为“访问器”。默认

40、情况下,这些访问器具有相同的可见性或访问级别:其所属属性或索引器的可见性或访问级别。有关更多信息,请参见可访问性级别。不过,有时限制对其中某个访问器的访问会很有用。通常是在保持 get 访问器可公开访问的情况下,限制 set 访问器的可访问性。npublic string Namenn getn n return name;n n protected setn n name=value;n n对访问器的访问修饰符的限制n不能对接口或显式接口成员实现使用访问器修饰符。n仅当属性或索引器同时具有 set 和 get 访问器时,才能使用访问器修饰符。这种情况下,只允许对其中一个访问器使用修饰符。n如

41、果属性或索引器具有 override 修饰符,则访问器修饰符必须与重写的访问器的访问器(如果有的话)匹配。n访问器的可访问性级别必须比属性或索引器本身的可访问性级别具有更严格的限制。自动实现的属性(3.0)n当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明变得更加简洁。当您如下面的示例所示声明属性时,编译器将创建一个私有的匿名后备字段,该字段只能通过属性的 get 和 set 访问器进行访问。n自动实现的属性必须同时声明 get 和 set 访问器。若要创建 readonly 自动实现属性,请给予它 private set 访问器。n自动实现的属性(Property)不允许具有属性(

42、Attribute)。如果您必须在属性(Property)的后备字段上使用属性(Attribute),则应该只创建常规属性(Property)。nclass LightweightCustomernn public double TotalPurchases get;set;n public string Name get;private set;/read-onlyn public int CustomerID get;private set;/read-onlyn属性n示例nSampleCSharpPropertyProperties属性n练习n定义一个类Employee,使期具有名字、年

43、龄、性别(枚举)等属性,然后再去掉get或set,并PropertyGrid观察各属性。属性(特性)n属性提供功能强大的方法以将声明信息与 C#代码(类型、方法、属性等)相关联。一旦属性与程序实体关联,即可在运行时使用名为反射的技术对属性进行查询。n属性具有以下特点:n属性可向程序中添加元数据。元数据是嵌入程序中的信息,如编译器指令或数据描述。n程序可以使用反射检查自己的元数据。通常使用属性与 COM 交互。属性(特性)n属性可以放置在几乎所有的声明中(但特定的属性可能限制在其上有效的声明类型)。在语法上,属性的指定方法为:将括在方括号中的属性名置于其适用的实体声明之前。n所有属性名称都以单词

44、“Attribute”结束,以便将它们与“.NET Framework”中的其他项区分。但是,在代码中使用属性时不需要指定属性后缀。例如,DllImport 虽等效于 DllImportAttribute,但 DllImportAttribute 才是该属性在.NET Framework 中的实际名称。nToolboxBitmap(typeof(Business.Controls.XPButton),XPButton.gif)npublic class XPButton:System.Windows.Forms.Buttonnn属性(特性)n创建创建C/C+联合联合nSystem.Runtim

45、e.InteropServices.StructLayout(LayoutKind.Explicit)nstruct TestExplicitnn System.Runtime.InteropServices.FieldOffset(0)n public long lg;n System.Runtime.InteropServices.FieldOffset(0)n public int i1;n System.Runtime.InteropServices.FieldOffset(4)n public int i2;n System.Runtime.InteropServices.Field

46、Offset(8)n public double d;n System.Runtime.InteropServices.FieldOffset(12)n public char c;n System.Runtime.InteropServices.FieldOffset(14)n public byte b;nCondition属性(特性)n当调用标记为条件的方法时,指定的预处理符号的存在或不存在决定是否包含或省略此调用。如果定义了该符号,则包含调用;否则省略调用。使用 Conditional 是封闭#if 和#endif 内部方法的替代方法,它更整洁、更别致、减少了出错的机会,如下例所示:n

47、 Conditional(DEBUG)nstatic void DebugMethod()nnn等同如下:n#if DEBUGnvoid ConditionalMethod()nnn#endif全局属性(特性)nassembly:AssemblyTitle(WindowsApplication1)nassembly:AssemblyDescription()nassembly:AssemblyConfiguration()nassembly:AssemblyCompany(Microsoft)nassembly:AssemblyProduct(WindowsApplication1)nasse

48、mbly:AssemblyCopyright(Copyright Microsoft 2005)nassembly:AssemblyTrademark()nassembly:AssemblyCulture()属性(特性)n示例nSampleCSharpAttributeAttributes属性(特性)nBrowsableAttribute:标记属性在PropertyGrid中是否可见。nBrowsable(true)npublic int MyProperty nnget nn return 0;nn属性(特性)nCategoryAttribute:在PropertyGrid中的分类nCate

49、gory(Alignment”)npublic ContentAlignment TextAlignment nngetnnnsetnnn属性(特性)nDescriptionAttribute:在PropertyGrid中的属性说明nDescription(背景颜色)npublic Color BorderColornnget nset n属性(特性)nDefaultValueAttribute:默认值nprivate bool myVal=false;nDefaultValue(false)npublic bool MyProperty nnget nnreturn myVal;nnset

50、nnmyVal=value;nn属性(特性)n练习n定义一个类把特性BrowsableAttribute、CategoryAttribute、DescriptionAttribute加到属性中,在PropertyGrid中观察结果。thisnthis 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。方法n方法的定义nattributes modifier return-type mothd-name(parameter-list)nmodifier:public、proteced、private、static、virtual、override、sealed、abstract、ex

51、ternnclass testnnpublic int Max(int x,int y)nnif(x y)return x;nelse return y;nn方法的参数n值参数n引用型参数n输出型参数n可变参数值参数n传递参数时方法不会修改实参值引用型参数n传递参数时,传递实参的内存地址,方法可以改变参数的值nclass Testnnstatic void Swap(ref int x,ref int y)nnint temp=x;nx=y;ny=temp;nnstatic void Main()nnint i=2,j=3;nSwap(ref i,ref j);nConsole.WriteLi

52、ne(i=0,j=1,i,j);nnn输出结果:ni=3,j=2向方法传递结构和向方法传递类引用之间的区别 nclass TheClassnn public string willIChange;nnstruct TheStructnn public string willIChange;nnclass TestClassAndStructnn static void ClassTaker(TheClass c)n n c.willIChange=Changed;n n static void StructTaker(TheStruct s)n n s.willIChange=Changed;

53、n n static void Main()n n TheClass testClass=new TheClass();n TheStruct testStruct=new TheStruct();n testClass.willIChange=Not Changed;n testStruct.willIChange=Not Changed;n ClassTaker(testClass);n StructTaker(testStruct);n System.Console.WriteLine(Class field=0,testClass.willIChange);n System.Conso

54、le.WriteLine(Struct field=0,testStruct.willIChange);n nClass field=ChangedStruct field=Not Changed输出型参数n与引用型参数类似,只是不用对变量初始化nclass Testnnstatic void SplitPath(string path,out string dir,out string name)nnint i=path.Length;nwhile(i 0)nnchar ch=pathi-1;nif(ch=|ch=/|ch=:)break;ni-;nndir=path.Substring(0

55、,i);nname=path.Substring(i);nnstatic void Main()nnstring dir,name;nSplitPath(c:windowsSystemhello.txt,out dir,out name);nConsole.WriteLine(dir);nConsole.WriteLine(name);nn可变参数n可变参数必须是最后一个参数,并不能有ref、out修饰符。方法的重载nclass Studentnnpublic int Max(int x,int y)nnif(x y)return x;nreturn y;nnpublic float Max(

56、float x,float y)nnif(x y)return x;nreturn y;nnstatic void Main()nnint i=2;nint j=3;nInt k=Max(i,j);nn构造方法n构造方法用于创建类实例nclass Annpublic A()nnclass Bnnpublic B()nstatic void Main()n nA a=new A();nn不调用构造函数初始化对象(3.0)n可以使用对象初始值设定项以声明性方式初始化类型对象,而无需调用类型的构造函数。nprivate class Catnn /Auto-implemented properties

57、n public int Age get;set;n public string Name get;set;nnstatic void MethodA()nn /Object initializern Cat cat=new Cat Age=10,Name=Sylvester;n构造方法重载nusing System;nclass Pointnn public int x,y;n /缺省构造函数n public Point()n n x=0;n y=0;n n /有两个参数的构造函数n public Point(int x,int y)n n this.x=x;n this.y=y;n n /

58、重载ToString函数n public override string ToString()n n return(String.Format(0,1),x,y);n nnclass MainClassnn static void Main()n n Point p1=new Point();n Point p2=new Point(5,3);n /用重载的ToString函数输出n Console.WriteLine(点#1 在 0,p1);n Console.WriteLine(点#2 在 0,p2);n n私有构造方法n私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中

59、。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他类(除嵌套类外)无法创建该类的实例。n声明空构造函数可阻止自动生成默认构造函数。注意,如果您不对构造函数使用访问修饰符,则在默认情况下它仍为私有构造函数。但是,通常显式地使用 private 修饰符来清楚地表明该类不能被实例化。私有构造方法npublic class Counternn private Counter()n public static int currentCount;n public static int IncrementCount()n n return+currentCount;n nnclass TestCo

60、unternn static void Main()n n Counter aCounter=new Counter();/Errorn Counter.currentCount=100;n Counter.IncrementCount();n System.Console.WriteLine(New count:0,Counter.currentCount);n n静态构造方法nusing System;nclass MyClassnn /静态构造函数n static MyClass()n n Console.WriteLine(调用了静态构造函数);n n public static vo

61、id MyMethod()n n Console.WriteLine(调用了MyMethod);n nnclass MainClassnn static void Main()n n MyClass.MyMethod();n n静态构造方法n静态构造函数具有以下特点:静态构造函数具有以下特点:n静态构造函数既没有访问修饰符,也没有参数。n在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。n无法直接调用静态构造函数。n在程序中,用户无法控制何时执行静态构造函数。n静态构造函数的典型用途是:当类使用日志文件时,将使用这种构造函数向日志文件中写入项。n静态构造函数在为非托管代

62、码创建包装类时也很有用,此时该构造函数可以调用 LoadLibrary 方法。调用基类构造方法nclass A private int x;n public A()public A(int i)x=i;nclass B:A private int y;public B()y=0;public B(int i):base(i)y=i;索引器n索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。索引器n象数组一样访问类索引器n索引器使得对象可按照与数组相似的方法进行索引。nget 访问器返回值。set 访问器分配值。nthis 关键字用于定义索

63、引器。nvalue 关键字用于定义由 set 索引器分配的值。n索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制。n索引器可被重载。n索引器可以有多个形参,例如当访问二维数组时。索引器n示例nSampleCSharpIndexerIndexers索引器重载nSampleCSharpIndexer索引符索引符重载.cs运算符重载n必须是静态的必须是静态的npublic class Annpublic int val;public static A operator+(A a1,A a2)n A a=new A();a.val=a1.val+a2.val;return a;nnnpub

64、lic class ClassAppnstatic void Main()nnA a1=new A();nA a2=new A();na1.val=3;na2.val=4;nA a=a1+a2;Console.WrieLine(a.val);nn运算符重载n练习:n1、定义一个向量类Vector,Vector中有两个double类型的字段XVector、YVector。Vector的长度Length定义为Length=XVector*XVector+YVector*YVector。重载操作符=、!=、=、=、=)等实现比较面积运算。委托(代理)nC/C+函数指针nlong(*pf)(int,i

65、nt);nlong func1(int i,int j)nnreturn(long)(i+j;)nnMain()nnint i=2;nint j=3;npf=func1;npf(i,j)n委托(代理)ndelegate void Del(int i,double j);nclass MathClassnn static void Main()n n MathClass m=new MathClass();nDel d=m.MultiplyNumbers;nSystem.Console.WriteLine(Invoking the delegate using MultiplyNumbers:)

66、;n for(int i=1;i=5;i+)n n d(i,2);n n void MultiplyNumbers(int m,double n)n n System.Console.Write(m*n+);n n委托(代理)n委托类似于 C+函数指针,但它是类型安全的。n委托允许将方法作为参数进行传递。n委托可用于定义回调方法。n委托可以链接在一起;例如,可以对一个事件调用多个方法。n方法不需要与委托签名精确匹配(2.0)。n委托类型派生自.NET Framework 中的 Delegate 类。委托类型是密封的,不能从 Delegate 中派生委托类型,也不可能从中派生自定义类。委托(代理)ndelegate void Del();nclass SampleClassnn public void InstanceMethod()n System.Console.WriteLine(“实例方法实例方法.);n static public void StaticMethod()n System.Console.WriteLine(“静态方法静态方法.);nnclass TestSamp

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!