还剩19页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
基础知识点C#、数据类型
1、值类型、引用类型
1.
1、预定义类型
1.
2、类型转换
1.
3、装箱和拆箱
1.
4、变量、常量
2、变量
2.
1、常量
2.
2、运算符和体现式
3、运算符、体现式
3.
1、特殊运算符
3.
2、优先级别
3.
3、流程控制
4、条件语句
4.
1、循环语句
4.
2、跳转语句
4.
3、异常处理
4.
4、程序构造5」、类
5、命名空间
5.
2、措施
5.3Main、程序例子
6、作业7一数据类型值类型、引用类型
1.1的数据类型可以提成两大部分值类型和引用类型C#值类型的变量总是直接包括着自身的数据,而引用类型的变量是指向实际数据的地址值类型包括整型、布尔型、实型、十进制型、构造和枚举、接口和数组C#从概念上看,其区别是值类型直接存储其值,而引用类型存储对值的引用这两种类型存储在内存的不一样地方值类型存储在堆栈中,而引用类型存储在托管堆上注意辨别某个类型是值类型还是引用类型,由于这种存储位置的不一样会有不一样的影响例如,是值类型,这int表达下面的语句会在内存的两个地方存储值20〃1和上都是整型变量1=20;••Ji;但考虑下面的代码这段代码假定已经定义了一种类是一种引用类型,它有classl,classl privatestringname;private int id;public Employee{name=Temp;id=0;}public Employeestring s,int i{name=s;id=i;}public stringName{get{return name;}set{name=value;}}public int ID{get{return id;}set{id=value;}class ItemFactoryTwhere T:new{public TGetNewItem{return newT;}}public class Test{public static void Main{Item Factory Employee EmployeeFactory=new ItemFactoryEmployee;〃〃此处编译器会检查与否具有公有的无参构造函数Employee//若没有贝会有错误The Employeemust have a publicparameterless constructorConsole.WriteLineH{O}ID is{1}.,EmployeeFactory.GetNewItem.Name,EmployeeFactory.GetNewItem.ID;}}}操作符Typeof用于获得系统原形对象的类型如等于typeofint int
32.和操作符Checked unchecked和操作符用于整形算术运算时控制目前环境中的溢出检查Checked uncheckedConst int x=1000000;Constinty=1000000;编译时会报溢出错误Return checkedx*y//、优先级别
3.3当一种体现式包括多种操作符时,操作符的优先级控制着单个操作符的求值次序表7-1操作符从高到低的优先级顺序类别操作符初级操作符x x.y Rxa[x]x++x-new typeof sizeofchecked unchecked一元操作符+・!~++x-x Tx乘、除操作符♦/%加减操作符+-移位操作符«»关系操作符==is as等式操作符=!二逻辑与操作符逻辑异或操作符A逻辑或操作符条件与操作符条件或操作符条件操作符#•赋值操作符=♦=/=%=+=.=«=»==A=1=四流程控制条件语句
4.1v条件语句可以根据条件与否满足或根据体现式的值控制代码的执行分支有两个分支代C#码的构造语句,测试特定条件与否满足;语句,它比较体现式和许多不一样的值if switch语句
1.if语法都是非常直观的if conditionstatcmcntselsestatements还可以单独使用语句,不加语句也可以合并子句,测试多种条件if elseelse if语句
2.switchswitch・・・case语句适合于从一组互斥的分支中选择一种执行分支其形式是switch参数的背面跟一组子句假如参数中体现式的值等于某个子句旁边的某个值,就执行case switchcase该子句中的代码此时不需要使用花括号把语句组合到块中;只需使用语句标识每case break个代码的结尾即可也可以在语句中包括一种子句,假如体现式不等于其case switchdefault他子句的值,就执行子句的代码下面的语句测试变量的值case defaultswitch integerAswitchintegerAcase1:Console.WriteLineintegerA=1H;break;case2:Console.WriteLineHintegerA=2;break;case3:Console.WriteLineH integerA=3n;break;default:Console.WriteLinenintegerA is not1,2,or3;break;注意的值必须是常量体现式——不容许使用变量case、循环语句
4.2提供了种不一样的循环机制、和在满足某个条件之C#4for while do--while foreach,前,可以反复执行代码块循环
1.for的循环提供的迭代循环机制是在执行下一次迭代前,测试与否满足某个条件,其语法如C#for下for initializer;condition;iterator statements其中是指在执行第一次迭代前要计算的体现式一般初始化为一种局部变量,作为•initializer循环计数器;是在每次迭代循环前要测试的体现式它必须等于才能执行下一次迭代;•condition true,是每次迭代完要计算的体现式一般是递增循环计数器当等于•iterator conditionfalse时,迭代停止循环是所谓的预测试循环,由于循环条件是在执行循环语句前计算的,假如循环条件为假,for循环语句就主线不会执行循环非常合用于一种语句或语句块反复执行预定的次数下面的例子就是使用循环的经for for典使用方法,这段代码输出从的整数〜99for int i=0;i100;i=i+1Console.WriteLinei;循环
2.while循环与循环同样,也是一种预测试的循环其语法是类似的,但循环只有while for while while一种体现式whileconditionstatements;与循环不一样的是,循环最常用于下述状况在循环开始前,不懂得反复执行一种语for while句或语句块的次数一般,在某次迭代中,循环体中的语句把布尔标识设置为结束while false,循环,如下面的例子所示int i=10,sum=0;while i0sum+=i;循环
3.do...whiledo-while循环是while循环的后测试版本do・・・while循环适合于至少执行一次循环体的状况inti=10,sum=0;do[i—;+二sum i;}while i0;循环
4.for each循环是我们讨论的最终一种循环机制也是非常受欢迎的一种循环foreach C#从下面的代码中可以理解循环的语法,其中假定是一种整型数组foreach arrayOflntsint[]numbers={4,5,6,1,2,3,-2,-1,0};foreach inti innumbersSystem.Console.WriteLinei;}其中,循环一次迭代数组中的一种元素对于每个元素,它把该元素的值放在型的变foreach int量中,然后再执行一次循环迭代temp假如需要迭代集合中的各项,并变化它们的值,就应使用循环for、跳转语句
4.3提供了许多可以立即跳转到程序中另一行代码的语句,在此,先简介语句C#goto语句
1.goto语句可以直接跳转到程序中用标签指定的另一行标签是一种标识符,后跟一种冒号gotogoto Label1;Console.WriteLinenThis wontbe executedn;Label1:Console.WriteLinenContinuing executionfrom here1;语句有两个限制不能跳转到像循环这样的代码块中,也不能跳出类的范围,不goto for能退出块背面的块语句的名声不太好,在大多数状况下不容许使用它try…catch finallygoto一般状况下,使用它肯定不是面向对象编程的好方式前面简要提到过break语句-------在switch语句中使用它退出某个case语句实际上,break也可以用于退出或循环,循环结束后,立即执行背面的语句for foreachwhile do...while假如该语句放在嵌套的循环中,就执行最内部循环背面的语句假如放在语break switch句或循环外部,就会产生编译时错误语句
2.continue语句类似于也必须用于、或循环中但它只从循环continue break,for foreachwhiledo...while的目前迭代中退出,然后从循环的下一次迭代开始重新执行,而不是退出循环语句
3.return语句用于退出类的措施,把控制返回措施的调用者,假如措施有返回类型,语句必return return须返回这个类型的值,假如措施没有返回类型,应使用没有体现式的语句return、异常处理
4.4Try-catchsTry-finallyTry-catchs-finally五程序构造、类
5.1v中的类是对数据构造的封装,是最重要的构成部分我们运用类定义多种新的C#C#数据类型,其中既包括数据内容,有包括数据操作,封装之后,类可以控制外界对它组员的访问类的静态组员属于类,非静态组员属于这个类的某个实例在一种类的实例一一对象的生命周期中,最先执行的代码是类的构造函数,构造函数总是用来初始化对象的特殊类型的函数不带参数的类的构造函数对类的实例的初始化始固定的,我们也可以使用带参数的构造函数,通过向他传递参数来对类的不一样实例进行不一样的初始化构造函数同样也可以使用默认参数当这个类的实例超过了作用域的时候,或者由于其他理由被破坏时,析构函数将释放分派给该实例的任何存储区、命名空间
5.2命名空间提供了一种组织有关类和其他类型的方式与文献或组件不一样,命名空间时一种逻辑组合,而不是物理组合,在文献中定义类时,可以把它包括在命名空间的定义C#中,后来在定义另一种类,在另一种文献中执行有关操作时,就可以在同一种命名空间中包括它,创立一种逻辑组合,告诉其他使用类的开发人员怎样使类有关,和对他们进行使用命名空间可以嵌套如Namespace ANamespaceBNamespace C代码块}每个命名空间名都由他所在的命名空间的名称构成,这些名称用句号隔开,首先是最外层,最终是自己的名字如上面的例子也可以写成Namespace A.B.C代码块不容许在另一种嵌套的命名空间中申明多部分的命名空间也不能在同一命名空间中有两个同名的类、措施
5.3Main程序是从措施开始执行的这个措施必须是类或构造的静态措施,并且其返回类C#Main型必须是血或虽然显式指定修饰符是很常见的,由于按照定义,必须在程序外部void public调用该措施,但我们给该措施指定什么访问级别并不重要,虽然把该措施标识为它也可private,以运行在调用程序时,可以让包括一种参数,将命令行参数转送给程序这个参数是一种字符串CLR数组,老式称为但可以接受任何名称在启动程序时,可以使用这个数组,访问通过args C#命令行传送过来的选项下面的例子是在传送给措施的字符串数组中迭代,并把每个选项的值写ArgsExample.cs Main入控制台窗口using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication2class Programstatic void Mainstringf]args forinti=0;iargs.Length;i++Console.WriteLineargs[i];}一般使用命令行就可以编译这段代码在运行编译好的可执行文献时,可以在程序名的背面加上参数,例如在命令行中输入存储目录dos/ConsoleApplication2/a/b/c输出/a/b/c六程序例子类的定义,继承,使用,类措施的重写
6.1vusing System;using System.Collections.Generic;using System.Text;namespace ConsoleApplicationlclass Vehicle{public intwheels;public floatweight;public voidF wheels=4;weight=10;class Car:Vehicle intpassengers;public voidF weight=8;wheels=8;Vehicle v=new Vehicle;v.wheels=4;v.weight=6;passengers=10;〃,Console.WriteLine〃{0}{1}{2}{3}{4}v.wheels,v.weight,wheels,weight,passengers;public overridestring ToStringO继承来的”实例化的string Result=weight:+weight.ToStringO+Vehicle weight:+weight.〃自己的属性ToStringO+passengers:+passengers.ToStringO;return Result;class Programstaticvoid Mainstring[]args{Car s=new Car;s.F;Console.WriteLines.ToStringO;、运算符重载
6.2运算符重载注意事项可被重载的一元操作符+、-、!、(取补)、++、
一、、a,〜true false可被重载的二元操作符+、-、*、/、%、!、八(异或)、<、>、<<、»>==、!=、b.<=、>=不容许被重载的操作符、||、=、?、+=、-=、/=、%=、|=、八=、«=>»二,实际上c.其中某些“复式操作符”在二元操作符被重载后自动生成,而不能显式定义必须成对重载的操作符(==,!=)、(<=,>=)d.++、--操作符重载时不能辨别其为前置或后置的〃根据经验值升级的例子e.using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplicationlclass Playerpublic int neili;public inttili;public intjingyan;public intr_neili;public intr_ti1i;public Playerneili=10;一种int类型的组员变量Value class1x,yx=new class1;x.Value=30;y二x;〃输出Console.WriteLiney.Value;30y.Value=50;输出Console.WriteLinex.Value;//50要理解的重要一点是在执行这段代码后,只有一种对象和都指向包括该对象的内存classl x y位置由于和是引用类型的变量,申明这两个变量只是保留了一种引用一一而不会实例化x y给定类型的对象由于和引用同一种对象,因此对的修改会影响反之亦然因此上面x y xy,的代码会显式和3050假如变量是一种引用,就可以把其值设置为确定它不引用任何对象null,y=null;在中,基本数据类型如和都是值类型假如申明一种变量,并给它赋予另一C#bool longbool种变量的值,在内存中就会有两个值假如后来修改第一种变量的值,第二个bool boolbool变量的值也不会变化这些类型是通过值来复制的相反,大多数更复杂的数据类型,bool C#包括我们自己申明的类都是引用类型它们分派在堆中,其生存期可以跨多种函数调用,可以通过一种或几种别名来访问公共语言运行库指的运行CLR CommonLanguage Runtime.NET时支持,包括一种面向对象类型系统和某些运行时服务执行一种精细的算法来跟踪哪些引用变量仍是可以访问的,哪些引用变量已经不能访问了会定期进行清理,删除不能访问的对CLR象,把它们占用的内存返回给操作系统这是通过垃圾搜集器实现的预定义类型
1.2承认的基本预定义类型并没有内置于语言中,而是内置于中例如,在C#.NET Framework中申明一种类型的数据时,申明的实际上是构造的一种实例支持C#int.NET System.Int32C#两个预定义的引用类型,如下表CTS公共类型系统名称类说明CTS根类型,其他类型都是从它派生而来的包括值类型Object System.Object字符串String System.String Unicode类型
1.object在中,类型就是最终的父类型,所有内在和顾客定义的类型都从它派生而来这是C#object C#的一种重要特性,类型就可以用于两个目的object•可以使用引用绑定任何特定子类型的对象object类型执行许多基本的一般用途的措施,包括、•object EqualsGetHashCode GetType和顾客定义的类也许需要使用一种面向对象技术——重写,提供其中某些ToStringo措施的替代执行措施例如,重写时,要给类提供一种措ToStringO till=50;jingyan=0;r_neili=50;r tili=50;public staticPlayer operator++Player p{p.neili=p.neili+50;p.tili=p.tili+100;二//p.r_neili p.r_neili;//p.r_tili=p.r_tili;return p;public voidShow〃,Console.WriteLine,,Tili:{0}tili;class TestpublicstaticvoidMain{Player man=new Player;man.Show;man++;Console.WriteLine z,Now upgrading...,z;man.Show;七作业
一、基础概念理解题(红色为必做题,其他选做).静态变量和非静态变量的区别?1和区别?
2.const staticreadonly是什么意思?
3.ex tern是什么意思?
4.abstract修饰符起什么作用?
1.1nternal修饰符是干什么的?
1.5ealed和的区别?
1.6verride overload.什么是索引指示器?8修饰符是起什么作用?
9.new关键字的含义?W.this.可以使用抽象函数重写基类中的虚函数吗?
11.密封类可以有虚函数吗?
12.假如基类中的虚属性只有一种属性访问器,那么继承类重写该属性后可以有几种属性13访问器?假如基类中有和两个呢?get set可以和一起使用吗?可以和一起使用吗?
14.abstract virtualoverride.接口可以包括哪些组员?15•类和构造的区别?
16.接口的多继承会带来哪些问题?
17.抽象类和接口的区别?
18.别名指示符是什么?
19.怎样释放非托管资源?20是什么?2LP/Invoke和的区别?
21.StringBuilder String和的含义
23.explicit implicit有什么用?
24.params.什么是反射?25
二、写程序练习循环、判断语句,运算符、函数重载,类的继承,仇参数(知识点必须练完,可以在一种程序例子中完毕,也可以写多种例子练习)施,该措施可以提供类自身的字符串表达假如类中没有提供这些措施的实现,编译器就会在对象中选择这些实现,它们在类中的执行不一定对的类型
2.string有关键字,在翻译为类时,它就是有了它,像字符串连接和字符串复制C#string.NET System.string这样的操作就很简朴了”;string strl=Hellostring str2=World;字符串连接string str3=strl+str2;//尽管这是一种值类型的赋值,但是一种引用类型对象保留在堆上,而不是堆栈上因此,string String当把一种字符串变量赋给另一种字符串时,会得到对内存中同一种字符串的两个引用不过,与string引用类型在常见的操作上有某些区别例如,修改其中一种字符串,注意这会创立一种全新的string对象,而另一种字符串没有变化考虑下面的代码using System;class StringExamplepublicstatic intMainstring si=a string;strings2=si;Console.WriteLinens1isn+si;Console.WriteLinens2is+s2;si=nanother string*;Console.WriteLinens1is nown+si;Console.WriteLinens2is now+s2;return0;其输出成果为si is a strings2isa stringsi is now anotherstrings2isnowastring换言之,变化的值对没有影响,这与我们期待的引用类型恰好相反sl s2类型转换
1.3隐式转换L隐式转换就是系统默认的、不需要加以申明就可以进行的转换隐式转换一般不会失败,转换过程中也不会导致信息丢失隐式转换包括下面几种•从sbyte类型到short,mt,long,float,double,或decimal类型•从byte类型到short,ushort,int,uiiit,long,ulong.float,double,或decimal类型0•从short类型到mt long,float,double,或decmial类型©,•从ushort类型到int,unit.lone,ulons,float,double,或decimal类型•从int类型到long、float,double,或decimal类型•从umt类型到long,ulong,float,double,或decimal类型•从long类型到float,double.或decimal类型J•从ulon类型到float,double,或decimal类型•从char类型至ij ushort.mt,unit.lon,ulone.float double.或decimal类型•从float类型到double类型.显式转换2显式类型转换,就是强制类型转换与隐式转换恰好相反,显式转换需要顾客明确指定转换的类型,不如看下面例子long1=5000;intI=intl;显式转换可以发生在体现式的计算过程中它并不是总能成功,并且常常也许引起信息丢失显式转换包括所有的隐式转换显式转换包括下面几种从sbyte至lj byte,ushort.unit,ulong.或char从byte到sbyte或char oJJ从short至U sbyte,byte,ushort,umt,ulong,或chai o从ushort至lj sbvte.byte,short,或char从int到sbyte.byte.,short,ushort.umt.ulong.或char从umt至lj sbyte,byteshort,ushort,int,或char从long至lj sbyte,byte,short,ushort,int,unit,ulong,或char从ulong至lj sbyte,byte,short,ushort,mt,unit,long.或chai o从char至lj sbvte.bvte.或short o从float至lj sbytebyte,short,ushort,mt,umt,long,ulong.char.或decimal□从double到sbyte,byte,short,ushort,int,umt,long,ulong,char,float,or或装箱和拆箱
1.4装箱和拆箱使我们可以把一种值类型当作一种引用类型看待装箱转换是指将一种值类型隐式的转换成一种类型,拆箱转换是指将一种类型显式地转换成一种值类型,他们互为逆过程Object Object装箱boxing装箱转换是指将一种值类型隐式转换成一种类型,或者把这个值类型转换成一种被该值类object型应用的接口类型把一种值类型的值装箱,也就是创立一种实例并将这个值给这个不如object objet.Inti=10;二Object obji;拆箱unboxing拆箱转换是指将一种对象类型显式转换成一种值类型,或是将一种接口类型显示地转换成一种执行该接口的值类型拆箱的过程分为两步首先,检查这个对象的实例,看它与否为给定的值类型的装箱值然后,把这个实例的值拷贝给值类型的变量如Int i=10;Object obj=i;Int j=intobj;二变量、常量变量
2.1v在中申明变量使用下述语法C#datatype identifier;例如inti;一旦它被申明之后,就可以使用赋值运算符二给它分派一种值i=10;还可以在一行代码中申明变量,并初始化它的值inti=10;假如在一种语句中申明和初始化了多种变量,那么所有的变量都具有相似的数据类型int x=10,y=20;要申明类型不一样的变量,需要使用单独的语句在多种变量的申明中,不能指定不一样的数据类型int x=10;bool y=true;//这样编译报错int x=10,bool y=true;变量的初始化L变量的初始化是强调安全性的另一种例子简朴地说,编译器需要用某个初始值对变量进行初始C#C#化,之后才能在操作中引用该变量大多数现代编译器把没有初始化标识为警告,但编译器把它当C#作错误来看待这就可以防止我们无意中从其他程序遗留下来的内存中获取垃圾值有两个措施可保证变量在使用前进行了初始化C#•变量是类或构造中的字段,假如没有显式进行初始化,在默认状态下当创立这些变量时,其值就是0•措施的局部变量必须在代码中显式初始化,之后才能在语句中使用它们的值此时,初始化不是在申明该变量时进行的,但编译器会通过措施检查所有也许的途径,假如检测到局部变量在初始化之前就使用了它的值,就会产生错误同样的规则也合用于引用类型考虑下面的语句Something objSomething;在中,这行代码仅会为对象仓」立一种弓|用,但这个引用还没有指向任何对象对该C#Something I变量调用措施或属性会导致错误在中实例化一种引用对象需要使用关键字如上所述,创立一种引用,使用关键字把该引C#new new用指向存储在堆上的一种对象objSomething=new SomethingO;//This createsa Somethingon theheap.变量的作用域2变量的作用域是可以访问该变量的代码区域一般状况下,确定作用域有如下规则•只要字段所属的类在某个作用域内,其字段(也称为组员变量)也在该作用域内局部变量存在于表达申明该变量的块语句或措施结束的封闭花括号之前的作用域内•在、或类似语句中申明的局部变量存在于该循环体内forwhile局部变量的作用域冲突大型程序在不一样部分为不一样的变量使用相似的变量名是很常见的只要变量的作用域是程序的不一样部分,就不会有问题,也不会产生模糊性但要注意,同名的局部变量不能在同一作用域内申明两次,因此不能使用下面的代码int x=20;//其他代码int x=30;字段和局部变量的作用域冲突在某些环境下,可以辨别名称相似(尽管不是通过完全限定的名称)、作用域相似的两个标识符此时编译器容许申明第二个变量原因是使得变量之间有一种基本的辨别,它把申明为类型级的变量C#看作是字段,而把在措施中申明的变量看作局部变量、常量
2.2在申明和初始化变量时,在变量的前面加上关键字就可以把该变量指定为一种常量顾名思义,const,常量是其值在使用过程中不会发生变化的变量〃变量的值不能变化const inta=100;中只能把局部变量和字段申明为常量C#常量具有如下特性•常量必须在申明时初始化指定了其值后,就不能再修改了•常量的值必须能在编译时用于计算因此,不能用从一种变量中提取的值来初始化常量假如需要这样做,应使用只读字段•常量用易于理解的清晰的名称替代了“含义不明确的数字或字符串”,使程序更易于阅读•常量使程序更易于修改例如,在程序中有一种常量,该常量的值为假如后C#SalesTax6%o来销售税率发生变化,可以把新值赋给这个常量,就可以修改所有的税款计算,而不必查找整个程序,修改税率为的每个项
0.06•常量更轻易防止程序出现错误假如要把另一种值赋给程序中的一种常量,而该常量已经有了一种值,编译器就会汇报错误三运算符和体现式运算符、体现式
3.1V算术操作符和算术体现式+加法操作符一减法操作符*乘法操作符/除法操作符%求余法操作符例加法体现式Enum Weekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};Weekday dayI=weekday.Sunday;Weekday day2=day1+2;Console.WriteLineday2;成果是Tuesday赋值运算符=+=—=*=/==A=«=»==是最简朴的赋值运算符,其他的是复合赋值,X+=5等价于X=X+5;关系运算符==等于!=不等于<不不小于>不小于<二不不小于等于>=不小于等于运算符Is元算符被用于动态的检查运行时对象类型与否和给定的类型兼容运算“的成果,其中,Is eis T”是一种体现式,是一种类型,返回值是一种布尔值它表达,与否能通过引用转换,装箱转换,e Te成功的转换于类型T如成果是1is inttrue操作符As操作符通过引用转换或装箱转换将一种值显式地转换成指定的引用类型不像显式类型转换,As as不会产生任何异常假如转换不可以进行,那么成果值为形如的运算,是一种体现式,null o“e asT”e T是一种引用类型返回值的类型总是的类型,并且成果总是一种值如T asstring;虽然,字符型不能转换为字符串类型,程序可以通过,不过有一种警告位运算与或IA异或取补〜«左移»右移、特殊运算符
3.2三元操作符?条件体现式先计算条件然后进行判断假如的值为计算的值,运算成果为的值;bx:y,b,b true,x x否则,计算运算成果为值一种体现式,从不会即计算值,又计算值条件体现式是向右关y,yxy联,例如将按的形式执行ab:cd:eab:cd:e自增和自减操作符++――就是对变量自身加一或者减一,注意,自增和自减运算符必须是对一种变量,一种属性访问器,一种索引访问器,而不能是常量或其体现式,如5++,都是非法的x+y++自增和自减操作符有前缀和后缀之分,前缀遵照“先增减,后使用”,后缀遵照“先使用后增减”操作符New一般用于创立一种新的类型实例,如改运算符尚有其他更多的使用方法,详class A{}Aa=new A;细如下在中,关键字可用作运算符、修饰符或约束C#new运算符用于创立对象和调用构造函数这种大家都比较熟悉,没什么好说的了1new修饰符在用作修饰符时,关键字可以显式隐藏从基类继承的组员2new new约束用于在泛型申明中约束也许用作类型参数的参数的类型3new有关第二种使用方法看下例using System;namespace ConsoleApplicationl{public classBaseA{publicint x=1;public void Invoke{Console.WriteLinex.ToStringO;}get{return x;}set{x=value;}}}public classDerivedB:BaseA{new publicintx=2;new publicvoidInvoke{Console.WriteLinex.ToString;}new publicint TrueValue{get{return x;}set{x=value;}}classTest{staticvoidMainstring[]args{DerivedB b=new DerivedB;〃调用的措施,输出b.Invoke;DerivedB Invoke2〃输出的组员值Console.WriteLineb.x.ToString;DerivedB x2BaseA a=b;/调用的措施,输出a.Invoke BaseAInvoke1〃调用的属性修改的组员的值a.TrueValue=3;BaseA TrueValue,BaseA x〃输出的组员的值Console.WriteLmea.X.ToString;BaseA x3「丘口位丁「四,「访〃输出的组员的值,仍然是Console.\/
713.116\/3170$19;DerivedB x〃可见,要想访问被隐藏的基类的组员变量、属性或措施,措施就是将子类造型为父类,然〃后通过1基类访问被隐藏的组员变量、属性或措施}}}约束指定泛型类申明中的任何类型参数都必须具有公共的无参数构造函数,请看下例new using System;usingSystem.Collections.Generic;namespace ConsoleApplication2public classEmployee。
个人认证
优秀文档
获得点赞 0