C#学习笔记(个人).pdf
、c#基础知识Q)1、C#中 foreach 用法f o r ea c h循环用于列举出集合中所有的元素,f o r ea c h语句中的表达式由关键字i n隔开的两个项组成。i n右边的项是集合名,i n左边的项是变量名,用来存放该集合中的每个元素。该循环的运行过程如下:每一次循环时,从集合中取出一个新的元素值。放到只读变量中去,如果括号中的整个表达式返回值为t r u e,f o r ea c h块中的语句就能够执行。一旦集合中的元素都已经被访问到,整个表达式的值为f a l s e,控制流程就转入到f o r ea c h块后面的执行语句。f o r ea c h语句经常与数组一起使用,下面实例将通过f o r ea c h语句读取数组的值并进行显示。数组的属性:A r r a y.L en g t h数组的容量利用这个属性,我们可以取得数组对象允许存储的容量值,也就是数组的长度、元素个数,这个比较好理解,数组还有其他的属性,比如数组的维数等,属性的用法比较简单,学会一种,其他的格式基本一致,这里我们就不举例了。当数组的维数、容量较多时,C#提供了 f o r ea c h语句,专门用来读取集合/数组中的所有元素,我们把这种功能叫做遍历。语法书写如下:遍历数组:f o r ea c h (t y p e o b j N a m e i n c o l l ec t i o n/A r r a y)这段语句会逐一检查数组中的所存储的变量值,并且一一将其取出,其中的t y p e是你所要读取的数组对象将要存储在o b j N a m e变量的数据类型,而o b j N a m e是定义了一个t y p e类型的变量名,代表每一次从集合和数组(c o l l ec t i o n/A r r a y)中取得的元素,c o l l ec t i o n/A r r a y则是所要存取的数组对象。用这种方法只需写一个f o r ea c h就可以遍历出除交错数组以外的所有维数的数组。例子:用f o r ea c h循环一次性遍历a数组i n t ,a =n ew i n t 2,2,2 1,2 ,3,4,5,6 ,7,8 ;定义一个2行2列2纵深的3维数组af o r ea c h(i n t i i n a)C o n s o l e.Wr i t eL i n e(i);这两种代码执行的结果是一样的都是每行一个元素,共 8 行,元素分别是1234 5 6 7 8string口数组里面是存放strin g 型的值,List string是存放strin g 类型的对象2、C#中的 InitializeComponent。方法lnitializeComponent()用于初始化窗体上控件。在每个窗体生成的时候,都会针对于当前的窗体定义InitializeComponent。方法,该方法实际上是由系统生成的对于窗体界面的定义方法。位于.cs文件之中的InitializeComponent。方法public Form011()lnitializeComponent();)在每一个Form文件建立后,都会同时产生程序代码文件.CS文件,以及与之相匹配的.Designer.CS文件,业务逻辑以及事件方法等被编写在C S 文件之中,而界面设计规则被封装在.Designer.CS文件里,下面代码为.Designer.CS文件的系统自动生成的脚本代码。namespace Example_FormTestpartial class frmStudent(/必需的设计器变量。/private System.ComponentModeLIContainer components=null;/清理所有正在使用的资源。/protected override void Dispose(bool disposing)if(disposing&(components!=null)components.Dispose();)base.Dispose(disposing);)#region Windows窗体设计器生成的代码/设计器支持所需的方法不要/使用代码编辑器修改此方法的内容。/private void lnitializeComponent()(this.SuspendLayout();/frmStudent/this.AutoScaleDimensions=new System.Drawing.SizeF(6F,12F);this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;this.ClientSize=new System.Drawing.Size(292,273);this.Name=frmStudenC;this.Text=学生信息”;this.MouseClick+=newSystem.Windows.Forms.MouseEventHandler(this.frmStudent_MouseClick);this.KeyPress+=newSystem.Windows.Forms.KeyPressEventHandler(this.frmStudent_KeyPress);this.ResumeLayout(false);)#endregion)在代码之中,可以很容易发现InitializeComponent。方法和Dispose。方法,前者为界面设计的变现内容,后者为表单释放系统资源时候执行编码。lnitializeComponent()方法反映了窗体设计器中窗体和控件的属性。通常不会在世界上个文件中修改代码。如果更改InitializeComponent。方法中的相关属性参数,在窗体设计器界面上也会显示出来。我们发现建个c#窗体项目,在 Form1.cs和 Form1.Designer.cs里分别有 个InitializeComponent。函数Form1.Designer.cs里 的 是 定 义(函数名后面有大括号包含定义内容)Form1.cs里 的 是 调 用(函数名后面分号结尾)partial表示以下创建的是分布类代码也就是说一个类的定义代码 可以写在两个不同的页面Form1.cs 和 Form1.Designer.cs注意:IrdtializeComponent。方法写在前面和后面是有区别的。InitializeComponent。方法是用来初始化窗体组件的,在 InitializeComponent之前,窗体的各个控件还没有进行初始化,比如说窗体上有一个TextBoxUserName,在 InitializeComponent之前它还只是一个TextBox类型的变量而已,如果在IrdtializeComponent之前调用这个TextBox的属性或方法,就会出错。再比如说你拖上取一个TextBox,它放在Form的位置,TextBox的一些属性。包括new 这个TextBox都放在那个函数里面处理的。我们可以看一下Form.Designer.cs,在那里找到InitializeComponent方法,您会发现窗体对象的初始化都是在那里做的。3 C#里面的#region是什么意思?S region是c#预处理器指令。#re g io n是一个分块预处理命令,它主要用于编辑代码的分段,在编译时会被自动删除。#region使你可以在使用VS代码编辑器的大纲显示功能时指定可展开或折叠的代码块。例如:El#region M y C l a s s d e f i ni t i o nI p u b l i c c l a s s M y C l a s s由s t a t i c v o i d M a i n()由 (卜 )卜#e nd r e g i o n备注:#r e g i o n块必须以#e nd r e g i o n指令终止。#r e g i o n块不能V#i f 块重叠。但是,可以将#r e g io n块嵌套在#1 块内,或将#if 块嵌套在#r e g io n块内。使用#region就是将一些有关联的代码组织在一起,然后折叠起来。这样你就在一个函数中看不到很长的令人头痛的代码段。当然这段代码很简单。在实际项目中,你可能看到上百行甚至更多的代码在一个#region中。如果把它折叠起来。看起来就会很整洁。re g io n不适合在大方法中使用,当你在 一 个方法中使用#re g io n的时候,停下来想想你刚刚写了什么代码?大多数时候,你可以将这些代码段独立成一个函数。4、C#中this的作用在 C M ,th is 关键字代表当前实例,我们可以用th is.来调用当前实例的成员方法,变量,属性,字段等;也可以用th is 来做为参数状当前实例做为参数传入方法.还可以通过th is 来声明索引器。下面介绍C#中th is 的作用一、C#th is 指针的几种用法1、限定被相似的名称隐藏的成员C#代 码 复制p u b lic c la s s T h is N a me白IIIp u b lic s tr ing na me =张三”;p u b lic int nu m=5 5;p u b lic T h is N a me()p u b lic v o id G e tT h is N a me(s tr ing na me,int nu m)(na me =th is,na me;调取全局变量 na menu m=th is,nu m;调取全局变量nu mH ttp C o nte x t.C u r r e nt.R e s p o ns e.W r ite (参数 na me 的值为:+na me+”;参数nu m的值为:+nu m);输出结果为 参数na me 的值为张.七参数 nu m值为:5 5”L2、将对象作为参数传递到别的方法中C#代 码 复制p u b lic c la s s T h is F Fp u b lic T h is F F()卜 )Ip u b lic s tr ing s h u ju()I由 II r e tu r n T h is指针当做方法传递“;I卜 )Ip u b lic v o id f l(T h is F F f f)I白 IH ttp C o nte x t.C u r r e nt.R e s p o ns e.W r ite(f f.s h u ju();I卜 )Ip u b lic v o id f()I由 If l(th is);th is 在这里可以理解为 T h is F F f f=ne ws T h is F F();当前类的实例I卜 )IL T h is F F f f=ne ws T h is F F。;方法实例f f.f ();调用方法 输出结果为:T h is指针当做方法传递3、声明索引器c#代码复 制p r iv a te int _ S y;p u b lic int th is int s y (g e t(r e tu r n _ S y;Q s e t s y=_ S y;二、C#中th is 的总结1、I h is 关键字引用被访问成员所在的当前实例。静态成员函数没有th is 指针。th is 关键字可以用来从构造函数,实例方法和实例化访问器中访问成员,不能在静态方法。静态属性访问器或者域声明的变量初始化程序中使用th is 关键字,这将会产生错误。2、在类的构造函数中出现的th is 作为一个值类型表示对正在构造的对象本身的引用。3、在类的方法中出现th is 作为一个值类型表示对调用该方法的对象的引用。4、在结构的构造函数中出现的t h i s 作为一个变量类型表示对正在构造的结构的引用。5、在结构的方法中出现的t h i s 作为一个变量类型表示对调用该方法的结构。5、c#.netSuspendLayout 和 Resume Layout在Designer中会看到这两个方法,究竟是做什么用的呢?一般在加载所有控件之前SuspendLayoul方法,挂起所有控件在界面的逻辑布局事件,等又有布局代码完后再调用ResumeLayout事件吧刚才挂起的逻辑布局一并执行。例如我们在设置初始化控件时候,都会用到Size、Location Anchor或Dock属性,而每一个属性都会去改变控件在界面上的布局,使得控件,每执行一段代码就就要界面重绘一次,那么我们先挂起所有事件,之后一起执行,这样就可以提高带有许多控件的应用程序的性能。控件的布局逻辑被挂起,直到调用R e s u m e L a y o u t 方法为止。当调整控件的多个属性时,将先后使用S u s p e n d L a y o u t 和 R e s u m e L a y o u t 方法取消多个L a y o u t 事件。例如,通常先调用S u s p e n d L a y o u t 方法,然后设置控件的 S i z e L o c a t i o n A n c h o r 或 D o c k 属性,最后调用 R e s u m e L a y o u t 方法以使更改生效。注意:为了防止layout事件的发生。这个事件将引发重新绘图的事件,如果介面上控件较多的话,改变控件某些属性时,由于不断地重画,性能变低,所以用suspendlayout来阻止。resumelayou可以结束上面的限制。6、C#中的set和get方法在面向对象编程(O O P)中,是不允许外界直接对类的成员变量直接访问的,既然不能访问,那定义这些成员变量还有什么意义呢?所以C#中就要用s e t 和 g e t 方法来访问私有成员变量,它们相当于外界访问对象的一个通道,一 个“接口”。先来看一段代码:c l a s s E m p l o y e ep r i v a t e s t r i n g n a m e;p r i v a t e b y t e a g e;p u b l i c s t r i n g N a m eg e ts e t r e t u r n n a m e;n a m e =v a l u e;p u b l i c b y t e A g eg e t r e t u r n a g e;)s e t a g e =v a l u e:)代码中定义了两个私有变量n a m e 和 a g e,当我们不想让外界随意访问该私有变量时,可以使用属性来访问,语法为:p u b l i c 返回类型(要与被访问变量的类型相同)属 性 名(不能与被访问变量同名)(g e t r e t u r n 被访问变量;s e t(被访问变量 =v a l u e;)当我们使用属性来访问私有成员变量时就会调用里面的g e t 方法,当我们要修改该变量时就会调用s e t 方法,当然在定义的时候可以只定义一个g e t 方法或只定义一个s e t 方法。如果只定义g e t 方法,那么这个相应变量就是“只读”的;如果只定义s e t 方法,那么相应变量就是“只写”的。c l a s s E m p l o y e ep r i v a t e s t r i n g n a m e;p r i v a t e b y t e a g e;p u b l i c s t r i n g N a m e(g e t r e t u r n n a m e;s e t n a m e =v a l u e;)*修改后*I I l|p u b l i c b y t e A g eg e t r e t u r n a g e;s e t(i f (v a l u e 1 0&v a l u e C#中的异常处理入门try catch throw软件运行过程中,如果出现了软件正常运行不应该出现的情况,软件就出现了异常。这时候我们需要去处理这些异常。或者让程序终止,避免出现更严重的错误。或者提示用户进行某些更改让程序可以继续运行下去。C#编程语言本身就为我们提供了这种异常处理机制。C#中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。或者试图将一个字符串 aaa 转换成整数。异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C#异常处理时建立在四个关键词之上的:t r y、c at c h、f i n al l y 和 t h r o wo try:一 个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个catch块。catch:程序通过异常处理程序捕获异常。catch关键字表示异常的捕获。finally:finally块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。throw:当问题出现时,程序抛出一个异常。使 用 throw关键字来完成。语法假设一个块将出现异常,一个方法使用t r y 和 c at c h 关键字捕获异常。t r y/c at c h 块内的代码为受保护的代码,使 用 y/c at c h 语法如下所示:1 t r y2 3/引起异常的语句4)5 c at c h (E x c e p t i o n N am e e l)6 7/错误处理代码8)9 c at c h (E x c e p t i o n N am e e 2)10(n/错误处理代码12)13 c at c h (E x c e p t i o n N am e e N)14 15/错误处理代码16 17 f i n al l y18 19/要执行的语句20)C#提供了很多种异常,我们在这里只要掌握最基本的异常E x c e p t i o n 就可以啦。在 c atc h语句中我们只处理E x c eption这个最基本的异常。下面我们看一个具体的例子,来更加清楚的理解一下C#的异常处理。你创建一个项目。解决方案名称为S loution2 2,项目名称为E x erc ise2 2,项目类型为控制台程序。点击P rogram,c s.在里边加入这些代码。Program.es 月 隼 Exercise22.Program123456 using S ystem;using S ystem.C ollec t ions.G eneric;using S ystem.Linq;using S ystem.Tex t:using S ystem.Threading.Tasks;7891 01 11 21 31 41 51 61 71 81 92 02 12 22 32 42 526272 82 93 03 13 23 33 43 53 63 73 83 94 04 14 24 34 44 54 64 74 8-namespac e E x erc ise2 2HB c lass P rogram static void Main(st ring args)(try(E x c eptionTest():C onsole.Writ eLine(调用方法 E x c eptionTest 成功“);)c atc h(E x c eption e)C onsole.Writ eLine(调用E x c eptionTest 出现异常“);C onsole.WriteLine(错误的简要信息:+e.Message);C onsole.Writ eLine(详细的错误信息:*+e.S tac kTrac e);)C onsole.R eadLine();)static void E x c eptionTest()C onsole.Writ eLine(清输入一个整数,按回车键结束:);string input=C onsole.R eadLine();int inputN umber:tryinputN umber=C onvert.Tolnt3 2(input);)c at c h(E x c ept i on)C onsole.Writ eLine(E x c ept ionTest 执行出现异常):throw new E x emption(转换出现异常):)finallyC onsole.Writ eLine(E x c ept ionTest 程序在 finally语句中执行“);)1我在这里简要的说明一下这段代码。1.2 7 行-4 5 行 我们新建了一个E x c eptionTest方法。在这个方法中要求用户输入一个整数。如果用户输入一个字符串,我们的程序会产生异常。2.3 9 行 我们用throw抛出了一个我们自己定义的异常。在里边加入了我们想传递的一些信息。3.4 1 行-4 4 行 finally语句是可选的。只有当需要做一些例如资源释放的操作的时候,才是需要的。不管有没有异常产生finally部分都会执行。4.1 3 行-2 3 行 调 用 E x c eptionTest方法。同时捕获异常。5.1 6 行 如果调用E x c eptionTest方法出现异常,这条语句不会执行。否则正常执行。6.2 1 行输出异常的简要信息7.2 2 行输出异常的详细信息。例如出错的代码位置。运行结果1 .用户输入字符串,产生异常file:/E:/vs2013_prqjects/Cleaming/22/Solution22/Exercise22/bin/Debug/Exercise22,EXE请输入一个整数,按回车键结束:I like cttE xceptionT est执行出现异常 _E xcept ionT est程序在f in ally语句中执行调用E xcept ionT est出现异常错隽的面要信息:转换由现异常详细的错误信息、:at E xerc ise2 2 .P rogram.E xcept ionT est in e:us2 01 3 _pi*o jectsClearning2 2 S olution2 2 E xercise2 2 P rogran.cs:line 3 9at E xerc ise2 2 .P rogram.M a in in e:us2 01 3 _pro jectsC tt learn ing2 2S olut ion2 2 E xei*c ise2 2 P rogram.cs:line 1 52 .用户输入整数,程序正常执行E g:看下面的程序段:try(return a/b;c atc h(E x c eption e)/当 b 为 0的时候这里可以打印提示:除数不能为0)异常的通俗原理在于,当出现某些错误的时候,你又不想直接把程序直接关闭,那么就在你捕捉到的异常里进行处理,这样程序可以继续运行,而不是马上关闭.上面你返回a/b,正常情况下b 不是0,那么就直接返回,不会执行c atc h里的东西,但是当你的b 是 0,就无法返回数据,那么异常了,异常然后被c atc h捕捉到,就执行 c atc h里的语句,然后继续运行下面的代码.11、C#String.split()用法小结第一种方法string s=abc deabc deabc de;string sA rray=s.S plit C c);foreac h(string i in sA rray)C onsole.WriteLine(i.ToS tringO);输出下面的结果:abdeabdeabde第二种方法我们看到了结果是以一个指定的字符进行的分割。使用另一种构造方法对多个字符进行分割:s t r in g s=z/ab c de ab c de ab c dez,;s t r in g s A r r ay l=s.S p l it (n e w c har 3 c,d,e );f o r e ac h(s t r in g i in s A r r ay l)C o n s o l e.W r it e L in e(i.T o S t r in g O);可以输出下面的结果ababab第三种方法除了以上的这两种方法以外,第三种方法是使用正则表达式。新建一个控制台项目。然后先添加 u s in g S y s t e m.T e x t.R e g u l ar E x p r e s s io n s;S y s t e m.T e x t.R e g u l ar E x p r e s s io n ss t r in g c o n t e n t=ag c s m al l m ac s m al l g g g s m al l y t x;s t r in g r e s u l t S t r in g=R e g e x.S p l it(c o n t e n t,s m al l,R e g e x O p t io n s.I g n o r e C ase)f o r e ac h(s t r in g i in r e s u l t S t r in g)C o n s o l e.W r it e L in e (i.T o S t r in g O);输出下面的结果:ag em acg g gy t x第四种方法s t r in g s t r l=我*是*一*个*教*师;s t r in g 1 s t r 2;s t r l=s t r l.R e p l ac e(*,*);s t r 2=s t r l.S p l it(*);f o r e ac h(s t r in g i in s t r 2)C o n s o l e.W r it e L in e(i.T o S t r in g O);第五种方法s t r in g s t r l=我*是*-*个*教*师;我希望显示的结果为:我是一个教师。我如果采用上面的第四种方法来做就会产生下面的错误,我 是一个教师。中间有空格输出,所以输出结果并不是希望的结果,这就又回到了正则表达式了这时可以采用下面的第五种方法s t r in g s t r l=我*是*个*教*师;s t r in g 1 s t r 2 =S y s t e m.T e x t.R e g u l ar E x p r e s s io n s.R e g e x.S p l it (s t r l,;f o r e ac h(s t r in g i in s t r 2)C o n s o l e.W r it e L in e(i.T o S t r in g O);12、C#异常类相关总结C#异常类一、基 类E x c e p t io nC#异常类二、常见的异常类1 S y s t e m E x c e p t io n类:该类是S y s t e m命名空间中所有其他异常类的基类。(建议:公共语言运行时引发的异常通常用此类)2、A p p l ic at io n E x c e p t io n类:该类表示应用程序发生非致命错误时所引发的异常(建议:应用程序自身引发的异常通常用此类)C#异常类三、与参数有关的异常类此类异常类均派生于S y s t e m E x c e p t io n,用于处理给方法成员传递的参数时发生异常1、A r g u m e n t E x c e p t io n类:该类用于处理参数无效的异常,除了继承来的属性名,此类还提供了 s t r in g类型的属性P ar am N am e表示引发异常的参数名称。2、F o r m at E x c e p t io n类:该类用于处理参数格式错误的异常。C#异常类四、与成员访问有关的异常1、M e m b e r A c c e s s E x c e p t io n类:该类用于处理访问类的成员失败时所引发的异常。失败的原因可能的原因是没有足够的访问权限,也可能是要访问的成员根本不存在(类与类之间调用时常用)2、M e m b e r A c c e s s E x c e p t io n 类的直接派生类:i、F il e A c c e s s E x c e p t io n类:该类用于处理访问字段成员失败所引发的异常ii MethodAccessException类:该类用于处理访问方法成员失败所引发的异常iii、MissingMemberException类:该类用于处理成员不存在时所引发的异常C#异常类五、与数组有关的异常以下三个类均继承于SystemException类1、IndexOutOf Except ion类:该类用于处理下标超出了数组长度所引发的异常2、ArrayTypeMismatchException类:该类用于处理在数组中存储数据类型不正确的元素所引发的异常3、RankException类:该类用于处理维数错误所引发的异常C#异常类六、与10有关的异常LIOException类:该类用于处理进行文件输入输出操作时所引发的异常。2、lOException类的5个直接派生类:i、DirectionN otFoundException类:该类用于处理没有找到指定的目录而引发的异常。ii、FileN otFoundException类:该类用于处理没有找到文件而引发的异常。iii、EndOfStreamException类:该类用于处理已经到达流的末尾而还要继续读数据而引发的异常。iv、FileLoadException类:该类用于处理无法加载文件而引发的异常。v、PathTooLongException类:该类用于处理由于文件名太长而引发的异常。C#异常类七、与算术有关的异常1、ArithmeticException类:该类用于处理与算术有关的异常。2、ArithmeticException 类的派生类:i、D iv id e B y Ze r oE x c e p t ion类:表示整数货十进制运算中试图除以零而引发的异常。ii、N ot F in it e N u m b e r E x c e p t ion类:表示浮点数运算中出现无穷打或者非负值时所引发的异常。13、C#中的Dictionary字典类介绍说明必须包含名空间 S y s t e m.C ol l e c t ion.G e n e r icD ic t ion a r y里面的每一个元素都是一个键值对(由二个元素组成:键和值)键必须是唯一的,而值不需要唯一的键和值都可以是任何类型(比如:s t r in g,i n t,自定义类型,等等)通过一个键读取一个值的时间是接近0(1)键值对之间的偏序可以不定义使用方法:定义D ic t ion a r y op e n Wit h =n e w D ic t ion a r y ();添加元素op e n Wit h.A d d(t x t,op e n Wit h.A d d(b m p,op e n Wit h.A d d(d ib,op e n Wit h.A d d(r t f,“n ot e p a d.e x e);“p a in t.e x e/z);“p a in t.e x e);/zw or d p a d.e x e);取值C on s ol e.Wr it e L in e (/zF or k e y =r t f,v a l u e =0 .z,,op e n Wit h z,r t f,z);更改值op e n Wit h,zr t fz/=w in w or d.e x e”;C on s ol e.Wr it e L in e (z,F or k e y =r t f,v a l u e =0 .,op e n Wit h r t r j);遍历k e yf or e a c h (s t r in g k e y in op e n Wit h.K e y s)(C on s ol e.Wr it e L in e(K e y =0 ,k e y);)遍历v a l u ef or e a c h (s t r in g v a l u e in op e n Wit h.V a l u e s)C on s ol e.Wr it e L in e (z,v a l u e =0 ,v a l u e);遍历 v a l u e,S e c on d M e t h odD ic t ion a r y .V a l u e C ol l e c t ion v a l u e C ol l =op e n Wit h.V a l u e s;f or e a c h (s t r in g s in v a l u e C ol l)(C on s ol e.Wr it e L in e (S e c on d M e t h od,V a l u e =0 z,,s);遍历字典f or e a c h (K e y V a l u e P a ir k v p in op e n Wit h)(C on s ol e.Wr it e L in e (Z/K e y =0 ,V a l u e =1 ,k v p.K e y,k v p.V a l u e);)添加存在的元素t r y(op e n Wit h.A d d(t x t,w in w or d.e x e);c a t c h (A r g u m e n t E x c e p t ion)(C on s ol e.Wr it e L in e(A n e l e m e n t w it h K e y =t x t a l r e a d ye x is t s.,z);删除元素op e n Wit h.R e m ov e(d oc);if (!op e n Wit h.C on t a in s K e y(d oc)(C on s ol e.Wr it e L in e (z,K e y d oc is n ot f ou n d.,z);判断键存在if (op e n Wit h.C on t a in s K e y(b m p)/T r u e(C on s ol e.Wr it e L in e (z,A n e l e m e n t w it h K e y =b m p e x is t s./z);参数为其它类型参数为其它类型D ic t ion a r y O t h e r T y p e =n e w D ic t ion a r y ();O t h e r T y p e.A d d (1,1,1 1,1 1 1”.S p l itO t h e r T y p e.A d d (2,2,2 2,2 2 2”.S p l it ;C on s ol e.Wr it e L in e(O t h e r T y p e l 2);参数为自定义类型首先定义类c l a s s D ou C u b ep u b l ic in t C od e g e t r e t u r n _ C od e;s e t _ C od e =v a l u e;p r iv a t e in t _ C od e;p u b l ic s t r in g P a g e g e t r e t u r n _ P a g e;s e t _ P a g e =v a l u e;p r iv a t e s t r in g _ P a g e;)然后声明并添加元素D ic t ion a r y M y T y p e =n e w D ic t ion a r y ();f or (in t i=1;i =9;i+)D ou C u b e e l e m e n t =n e w D ou C u b e();e l e m e n t.C od e =i*1 0 0;e l e m e