C学习笔记c重点整理_第1页
C学习笔记c重点整理_第2页
C学习笔记c重点整理_第3页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CTGS-资料文件C#学习笔记1. C#具有所有面向对象的语言的所有特性:封装,继承,多态。在C#系统中,所有的类型都可以看作一个对象。C#只允许单继承,即一个类不会有多个基类,C#不会有全局函数,不会有全局变量,不会有全局常数,所有的一切只能封装在一个类中。2. .net 包括四个部分: vos 类型系统。元数据 ;公用语言规范 ;虚拟执行系统。3. using system 表示导入名称空间。4. 让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方法总是为我们完成某件工作的。在C#中,程序的执行总是从 main()方法开始的,一个程序中不允许出现两个或两个以上的main()

2、方法。对于习惯学C控制台程序的读者,必须要牢记:main()方法必须包含在一个类中。5. 利用 string 可以方便地对字符串进行连接或剪切。 例: string s= ”good ”+ ”morn i ng ”;char x=s3 字符串可以通过下 标进行索引,得到一个字符。 .6. 我们可以用 /进行单行标注, /*/ 进行多行标注。7. 在C和C+中,任何非0值都表示真,在 C#中,任何非0值都不能代替true.在其它类型的整型值和布尔值之 间不存在任何的转换,将整型转换成布尔型是不合法的。 。 .8. 把一系列相关的变量组织成单一实体的过程称为生成结构的过程。这个单一实体的类型叫结构

3、类型,每一个 变量就是结构的成员。 .9. 结构类型包含的成员类型可以相同,也可以不同。我们甚至可以把一个结构类型当作另一个结构成员的类型。10. 枚举 实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。结构类型变量的值由各个成员的值组合而成。而枚举则不同,枚举类型的变量在某一时刻只能取枚举中某个元素的值。按照系统的设定,每个元 素的类型都为整型。且第一个元素的值为 0,后面的每个元素梯加1,也可以直接赋值。如把前面第一个元素的值设为 1,后面的元素不用设,系统自动将后面元素的值递加 1.11. C#中另一大数据类型是 引有类型。其含义是该类型的变量不直接存储所包含的值,而是指向它所要

4、存储的值。也就是说 引用类型存储实际数据引用值的地址 。 .12. 类是面向对象编程的基本单位,是一种包含数据成员,函数成员和嵌套类型的数据结构。类和结构都包含了 自己的成员,但它们的区别是:类是引用类型 ,而结构是值类型。 .13. 如果我们对 某个类定义了一个变量 ,则我们就将它称为类的一个实例 。14. 我们常用到的类: object 类。这个类是其它所有类的基类,其它类型可以直接或间接地从object 类中继承。因此,对一个 object 类的变量可以赋于任何类型的值。 .15. 代表? 在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数。如: de

5、legate int Mydelegate(). 在使用的时候: Mydelegate d=new Mydelegate(p.instanceMethod). 为什么不用 delegate d=new Mydelegate(p.instanceMethod)呢?原因是 delegate相当于 class需要一个名字,class myclass 这个class的名字是 myclass而且它包含有其它元素、常数或者函数,变量等。跟 char a=a不同,它不包含有 其它的元素,a就是一个变量。而 myclass不是变量,它只一个名字。而myclass a=new myclass(); a 才是变量

6、,是类的一个实例。在这里,这个delegate的名字是Mydelegate ,也并不是一个变量。16. 变量 从用户角度来说,是存储信息的基本单元,从系统角度来说,变量就是计算机内存中的一个储存空间。17. 静态方法不能用类的实例来访问,必须用类名来访问。18. 数组的声明 :数组的类型 数组的元素个数 数组的名字 ;数组个数 可以通过数组名加圆点加 Length 获得。如 arr.Length表示arr数组的个数.19. 在进行批量处理数据的时候 ,我们要用到数组 .数组是一组类型相同的有序数据.20. 数组的初始化:int a1= new int1,2,3;为什么是new int,而不是n

7、ew a1呢:因为int是类型,a1是int类型的一个实例.而且a1所代表的是1,2,3,并不是函数 与delegate int Myclass();不同,Myclass()虽然是一个名字 但它可 以代表一个函数 ,不是常数 .原则 :类型后面的名字如果可以代表函数,则这个名字就是一种类型.如果类型后面的名字代表常数 ,则这个名字不是一种类型 ,只是类型的一个变量.或者可以用另一种说法:如果名字后面含有(),则在赋值或设定实例的时候new后面要用该名字作为类型.21. 变量名不能与C#中的关键字名称相同。变量名不能与C#中库函数名称相同。22. 静态变量: static int a; 一旦静态

8、变量所属的类被加载,直到包含该类的程序运行结束前它将一直存在。.CTGS-资料文件23. 稳性数据转换实际上就是从低精度的数据转换成高精度的的数据类型。如:ushort转换成int.24. 隐式枚举转换允许把十进制数0转换成任何枚举类型,对其它整数则不存在这种隐式转换。25. 从元素类型为TS的数组类型S到元素类型为Tt的数组类型T转换,如果元素类型为值类型,则不能进行隐 式转换。.显式数值转換显武坡值转换足指当不存在相应的隐式转换时,从-种数了类型到另-种数了娄 型的转换q包括 从 sbyte 到 byt巴 ushoil. uint. iilong.或 cliai o 从 bjle 到 sb

9、yle 或 clur3 从 shoit 至U sbyte, byte, ushort, unit, ulong. diarg 从 uslijoii 到 sbyte. byt亡.slioit.或 cliai: X int fl sbyte. bTe. short, ushort. niiiL nlotig. 或 char 6 从 niiit 至U sbe. byre, sliort. nsliort. uit char< * longbyt亡* byte, short, ushort. int* uint. ulong. 或 cliara 从 ulong 到 sbytc. byte, sh

10、ort, ushort intb uuit5 long,或 diara 从 chai-到 sbje. byre.或 shoru 从 float 貝I sbyt亡* byte, shoit. nshoii. iiit. iiint. long, iilong. char. 或 deciinnL 从 double 到 sbytc. bytu short ushort. intb uiiit, long, idoug. char, float, or f戈26. 有一个元素类型为int的枚举类型E,则当执行从E到byte的显示枚举类型转换时,实际上作的是从int到byte的显示数字转换。当执行从by

11、te到E的显式枚举转换时,实际上是执行byte到int的隐式数字转换。女口: Weekday day;day=(Weekday) 3;实际上是 E到byte的显示枚举类型转换。27. 如何使用枚举:enumColorred=0, yellow, blue,green,purple;Color color_arr = newColor ();Color_arr=(Color) 2;Console.WriteLine(“ Color_arr0 ” ,Color_arr);则其输出结果为blue.28. 赋值制作符(=)和条件制作符(?:)按照右结合的原则,即制作从右到左的顺序执行。Y=(x>

12、10? 0:1).29. 枚举类型的加法:Weekday day1=Weekday.Sunday;Weekday day2=Weekday.Saturday;Weekday day3=day1+6; 枚举型加法实际上枚举基类型元素相加即一般为(int型相加)。.30. 如果两个整数类型的变量相除又不能整除,返回结果是不大于相除之值的最大整数。31. 求余运算:5%3= 2。5%1.5= 0.5.32. as制作符用于通过引用转换或装箱转换将一个值显式地转换成指定的引用类型。33. 位运算符就是对数按二进制位进行运算的制作符。位运算中的异或运算,当两个位相同时,异或运算结果为0,不相同时异或运算

13、为1.移位运算,左称位将制作数向左位移,高位被抛弃,低位顺序补0.右移运算时,如果X为非负数,最高位设为0。如果X为负数,最高位设为1,即最大为1.34. 自增自减制作符:自增自减制作符有前缀和后缀之分。对于前缀制作符,遵行的原则是“先增减,后使用”, 后缀则相反,“先使用,后增减”。35. new制作符:new制作符用于创建一个新的类型实例。它有三种形式:1,对象创建表达式。2,数组创建表达式。3代表创建表达式。36. typeof制作符用于获得系统原型对象的类型。CTGS-资料文件37. check 和 uncheck 制作符 只影响其置于括号中的运算的溢出检查。二 进程安排控制1. C#

14、提供的选择语句有if和switch语句。2. 如果if或else语句包含的嵌套语句只包含一条执行语句,则嵌套部分的大括号可以省略。3. 每一条 else 与离它最近且没有其它 else 与之配对的 if 相搭配。 4.if 语句仅允许布尔数据类型的结果。例: if(args.length=0) 是正确的。而 if(args.length) 是不正确的。 args.length 返回一个整形数( integer )。 .5. switch 语句是只能有一个 default 标签。6. C#中它要求每个case标签项后使用break语句或中转语句goto,即不允许从一个case自动遍历到其它cas

15、e.如果 想遍历其它语句, 则可以加入下面两条跳转语句: goto case lable: 跳至标签语句执行。 Goto default: 跳至 default 标签执行。 .7. 数组的初始化 :int a1=new int1,2,3,4,58. 在事先知道循环次数的条件下,用 for 循环是比较方便的。9. while 语句 中允许使用 break 语句来结束循环。 也可以使用 continue 语句来停止内嵌语句的执行, 继续进行 while循环。 .10. 可以使用break和continue语句来控制循环的表达。女口 :要求打印除7以外的0到9的语句,只需要在到打印7的时候,跳出打印

16、语句就可以了。 For(int i=0;i<9;i+) if i=7 continue;console.write(i);.11. foreach(Myint x in Prime)12. 预编译和条件编译都是以 #开头的。可以帮助我们在程序执行过程中发出编译的不对或警告。13. 溢出的处理用 checked 来检测。14. 预处理指令如果出现在其它输入输出元素中间就不会被执行。中writeLine或Readline等中间。.三类1. C#中的类只支持单继承。2. 对类成员的访问: 1. 公有成员。 Public ,允许外部访问。 2. 私有成员。 Private, 只允许类中的成员访问

17、。 派生类 都不能访问。 3. 保护成员。 Protected. 方便派生类的直接访问, 同时又希望对外部是隐藏的。 4. 内部成员。 Internal.对于同一包内的程序或库是透明的。而对于包外是隐藏的。.5. 类中的成员 要么是静态要么是非静态。 一般来说, 静态成员是属于类所有, 非静态成员则属于类的实例对象。访问的时候:静态:类名.成员名。非静态:实例名.成员名(this.成员名)static .6. 关键字const用于声明常量,后跟数据类型的声明。例:public con st double x=1.0;.7. 构造函数 不声明返回类型 ,构造函数用于执行类的实例的初始化。8. 折

18、构函数 在类的实例超出实用范围时, 我们希望收回它所占的存储时使用。 析构函数跟类名相同, 只是在前面加 上一个符号:.9. 值参数 :使用 值参数 时,初调用的方法不会修改内存中 实参的值 。 引用型参数: 引用型参数并不开辟新的内存区域。 当利用引用型参数向方法传递形参时, 编译程序将把实际参数所 在内存中的地址传递给方法。.10. substring(0,i) 从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。 String.indexof(char)报告指定 Unicode 字符在此字符串中的第一个匹配项的索引.11. 输出型参数:输出型参数也不开辟新内存,跟引用型参

19、数一样, 只是引用型参数在使用的时候不用需要对变量进行初始化,引用型参数用于传递方法的返回数据。.12. 如果形参中包含了数组参数,那么它必须在参数表中位于最后。另外,参数只允许一维数组。13. 静态方法 可以访问类中的静态成员,但不能访问非静态成员。 但可以将类的实例当作参数传递给方法使用,指明具体的调用对象,这时就可以制作实例的静态和非静态成员了。.14. 类的方法的重载 :方法的名字相同,但 参数个数或类型不同 ,编译器 就能知道在什么时候调用什么方法。15. C# 中,制作符重载 总是在类中声明, 并且通过调用类的成员方法来实现。 制作符重载可以适用于类的 实例的CTGS-资料文件制作

20、。16. 静态域的声明用 static 修饰符。无论建立多少个该类的实例,内存中只存在一个静态数据拷贝。域相当于简单 成员变量。在另一个类对静态域的访问可以通过对静态域所在类的 public 方法进行访问。 .17. 简单地说: const 型表达式 的值在编译时形成, 而只读域 static readonly 表达式的值在程序运行时才形成。 这 种方法有利于版本的控制。 .18. 对于静态域,类在装载时对其进行初始化。对于非静态域,在类的 实例创建 时进行初始化。19. 虽然域和属性语法类似, 但不能把属性当作变量那样使用。 也不能把属性当作引用型参数或输出型参数进行传 递。在属性的访问声明

21、中,对属性的值的访问用 get关键字标出。对属性的值的写制作 用set标出。.20. 不直接制作类的数据内容,而是通过访问器进行访问,它借助get和set对属性值 进行读写。事件和索引指示器1. 事件所声明的类型 必须是一个代表类型 (delegate), 代表类型应预先声明。2. 在编写类的时候,我们可以编写事件向客户说明发生了什么事情。事件可以在类的属性或域 中加以说明,但事件的类型必须是 代表型 的。我们可以预订事件确保事件初触发或撤消触发。.3. 索引指示器为我们象使用 数组那样 为类或类的实例添加路径列表,通过 下标进行访问类中的信息。4. 事件的声明格式:例: public eve

22、nt eventhandler click;这个省略了事件访问声明。 .5. public event eventhandler click 。 这个没有省略事件访问声明。大多数情况下不用事件访问声明。.6. 索 引 指 示 器 : IPaddress m_arrayips;public void IPaddress thisint nindex getreturnm_arrayips int nindex ;this 代表实例,我们象使用 数组那样 为类或类的实例添加路径列表 . 实例 i 实际 上代表的是 类中的属性或域的信息列表 。实例 i.继承1. C#中,一个派生类只能从一个类中继承

23、。Object类为所有类的基类。2. 虚方法 :当类中的方法声明前加了 virtual ,我们称为虚方法,它在执行时可以被派生类改变。派生类中Override+ 虚方法。虚方法在基类中定义,则基类运行虚方法时会实际运行派生类中的方法。还必须指明,基类实例=派生类实例。.3. 抽象类 :abstract. 抽象类只能作为其它类的基类,不能直接实例化。如果一个非抽象类从抽象类中派生,则其必须通过 重载来实现所有继承而来的抽象成员。抽象类是特殊的虚类。.4. 在派生类中重新定义虚方法,要求方法名称,参数个数和类型必须与基类虚方法完全一致。5. 只能在 抽象类 中声明 抽象方法 。 抽象类 可以作为非

24、抽象类的基类,也可以作为派生类。我们可以利用抽象方法来重载基类虚方法,这时基类中的 虚方法 就被拦截了。 .6. 密封类不能继承 ,密封类不能同时又是抽象类,抽象类总是希望被继承。密封类不可能有派生类,如果密封 类中有虚成员函数,则该成员可以转化成非虚的, virtual 无效。 .7. 密封方法 可以防止方法的重载。不是所有成员方法都可以作为密封方法,密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed 修饰符总是和 override 修符同时使用。 .8. 抽象属性,抽象方法 只允许在 抽象类 中声明。抽象类的这些成员交给派生类去实现。必须在非抽象类中

25、重载抽象属性,非抽象类不允许存在抽象成员。属性声明时如果有sealed ,则必须同时有 override. 修饰符。 .9. 抽象方法 在派生类中不能用base关键字会访问。接口1. 每个组件都是独立的,有其独特的功能,只能通过接口与外界通讯,当一个组件需要提供新的服务时,可以 通过新的接口来实现。 .2. 组件 应该具有与编程语言无关的特性。组件模型是一种规范,不管采用哪种语言设计组件,都必须遵守这一 规范。3. 在接口的声明体中, 可以定义接口的成员,接口的成员可以是方法,属性,索引指示器和事件。4. 接口继承和类继承不同,接口继承只是说明继承。C#中类继承只能是单继承,但接口可以是多继承

26、。被继承...8.9.10.CTGS-资料文件的接口应该是访问得到的,不能从 private 或 internal 类型的接口中继承。 . 对一个接口的继承 也就继承了这个接口的所有成员。接口成员不能是常量,域,制作符,构造函数或析构函数,而且不能包括所有的静态成员。接 口 成 员 默 认 的 访 问 方 式 是 public , 接 口 成 员 声 明 不 能 包 含 任 何 修 饰 符 。 与 不 能 加 abstract,public,protected 如果 底层成员的命名

27、与高级成员 的命名一样,那么底层成员将覆盖同名高级成员。但由于接口的多继承性, 如果两个父成员具有两个相同名的成员,这就产生了两义性,这时需要显示声明 ,明确指出需要调用哪个父 接口成员。 .我们只需要记住一点: 一旦成员被覆盖以后 ,所有对其的访问都被覆盖后的成员“拦截”。 接口定义不包括方法的实现部分, 接口可以通过类和结构来实现 。用类来实现接口的时候,接口名称必须包 含在类声明的 基类列表 中。如: class A: isequence,itest, 如果类实现了接口,那么类也隐式地继承了 该接 口的所有父接口,不管这些父接口有没有在类的声明的基类列表中出现。 .一个类可以实现多个接口

28、。如果类中 每个成员都明显地指出了被实现的接口 ,通过这种途径被实现的接口我 们称之为显式接口成员。显式接口成员只能通过接口调用,而不能通过类调用。 .不能在方法调用,属性访问,以及索引指示器访问中通过全权名访问显式接口成员执行体。事实上 ,显式接 口成员执行体 只通过接口的实例,仅仅引用接口的成员名称来访问。 .显式接口成员执行体的接口 必须显式地出现在类的基类列表中,即使类隐式的实现了接口。 接口的成员包括它自己声明的成员,而且包括该接口所有父接口声明的成员。在接口的映射上 ,不仅要对接 口声明中显式声明的所有成员进行映射, 而且要对隐式地从父接口中继承而来的接口成员进行映射。 包括与 父

29、接口中相同名称的成员。 .类必须 为所有基类表中列出的所有接口成员提供具体的实现。类中使用 Private,protected 和 static 修饰符的成员不能参与实现接口的映射。 如果子接口成员要覆盖父接口的成员,成员的名字必须相同,而且子接口成员名称前用new.一个类 继承了它的基类提供的所有接口的实现 。如果不显式的重新实现接口,派生类就无法改变从基类中继 承来的接口映射。 .显式说明的接口成员 不能被声明为虚的。但可以通过显式接口实现调用另一个方法,这个被调用的方法可以 声明为虚的。允许被派生类重载。 .继承了接口实现的类可以对 接口进行重实现 ,这个接口要求是在类声明的基类列表中出现过的。 抽象类允许将接口的方法映射到 抽象的成员方法。显式说明的接口成员 不能是抽象的,但它允许调用抽象的 方法。组织应用程序使用普通的函数库,在程序链接时将库中的代码拷贝到可执行文件中,这叫 动态链接库 不一样,只有程序在使用时才将其拷贝,并且只有一份拷贝。 仅包括可执行代码,而且通常还包括了各种类型的预定义数据和资源。装配有两种类型:应用程序和库。应用程序都有一个入口,能常扩展名为:静态链接

温馨提示

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

评论

0/150

提交评论