版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#学习笔记 1. c#具有所有面向对象的语言的所有特性:封装,继承,多态。在C#系统中,所有的类型 都可以看作一个对象。C#只允许单继承,即一个类不会有多个基类,C#不会有全局函数, 不会有全局变量,不会有全局常数,所有的一切只能封装在一个类中。 2. .net包括四个部分:vos类型系统;元数据;公用语言规;虚拟执行系统。 3. using system表示导入名称空间。 4. 让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方法总是为我 们完成某件工作的。在C#中,程序的执行总是从mainO方法开始的,一个程序中不允 许出现两个或两个以上的main。方法。对于习惯学C控制
2、台程序的读者,必须要牢记: main()方法必须包含在一个类中。 5. 利用string可以方便地对字符串进行连接或剪切。例:string s=” goodM +” morning :char x=s3字符串可以通过下标进行索引,得到一个字符。 6. 我们可以用进行单行标注,/* */进行多行标注。 7. 在C和C+中,任何非0值都表示真,在C#中,任何非0值都不能代替true.在其它类 型的整型值和布尔值之间不存在任何的转换,将整型转换成布尔型是不合法的。 8. 把一系列相关的变量组织成单一实体的过程称为生成结构的过程。这个单一实体的类型 叫结构类型,每一个变量就是结构的成员。 9. 结构类
3、型包含的成员类型可以相同,也可以不同。我们甚至可以把一个结构类型当作另 一个结构成员的类型。 10. 枚举实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。结构类型变量的 值由各个成员的值组合而成。而枚举则不同,枚举类型的变量在某一时刻只能取枚举中 某个元素的值。按照系统的设定,每个元素的类型都为整型。且第一个元素的值为0. 后面的每个元素梯加1,也可以直接赋值。如把前面第一个元素的值设为1,后面的元素 不用设,系统自动将后面元素的值递加1. 11. C#中另一大数据类型是引衣类型。其含义是该类型的变量不直接存储所包含的值,而是 指向它所要存储的值。也就是说引用类型存储实际数据引用值的
4、地址。 12. 类是面向对象编程的基本单位,是一种包含数据成员,函数成员和嵌套类型的数据结构。 类和结构都包含了自己的成员,但它们的区别是:类是引用类型,而结构是值类型。 13如果我们对某个类定义了一个变量,则我们就将它称为类的一个实例。 14.我们常用到的类:object类。这个类是其它所有类的基类,其它类型可以直接或间接地 从object类中继承。因此,对一个object类的变量可以賦于任何类型的值。 15代表?在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带 有输出类型的参数。如:delegate int Mydelegate().在使用的时候:Mydelegate
5、 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才是变量,是类的一个实 例。在这里,这个delegate的名字是Mydelegat
6、e,也并不是一个变疑。 16. 变量从用户角度来说,是存储信息的基本单元,从系统角度来说,变量就是计算机存中 的一个储存空间。 17. 靜态方法不能用类的实例来访问,必须用类名来访问。 18. 数组的声明:数组的类型数组的元素个数数组的名字;数组个数可以通过数组名加 DOC格式. 圆点加Length获得。如arr. Length表示arr数组的个数 19. 在进行批量处理数据的时候.我们要用到数组数组是一组类型相同的有序数据. 20. 数组的初始化:int al=new int 1,2,3;为什么是new int,而不是new al呢:因 为int是类型,al是int类型的一个实例而且al所代
7、表的是1,2,3,并不是函数. 与delegate int MyclassO ;不同.MyclassO虽然是一个名字,但它可以代表一个函数, 不是常数.原则:类型后面的名字如果可以代表函数,则这个名字就是一种类型.如果类 型后面的名字代表常数.则这个名字不是一种类型,只是类型的一个变量.或者可以用另 一种说法:如果名字后面含有(),,则在賦值或设定实例的时候new后面要用该名字 作为类型. 21. 变量名不能与C#中的关键字名称相同;变量名不能与C#中库函数名称相同。 22. 靜态变量:static int a;旦静态变量所属的类被加载,直到包含该类的程序运行结 束前它将一直存在。 23. 稳
8、性数据转换实际上就是从低精度的数据转换成高精度的的数据类型。如:ushort转换 成 int. 24. 隐式枚举转换允许把十进制数0转换成任何枚举类型,对其它整数则不存在这种隐式转 换。 25. 从元素类型为TS的数组类型S到元素类型为Tt的数组类型T转换,如果元素类型为值 类型,则不能进行隐式转换。 6.2.1显式数值转换 显式数值转换是指当不直在相应的隐式转换时,从一种数字类型到另一种数字类 型的转换。包括: ,从 sbyte 到 byte, usliort. unit, ulong.或 char, 从 byte 到 sbvte 或 char。 从 short 纟U sbyte. byte
9、, ushort. uiiit. ulong, 或 char。 从 usliort 到 sbyte. byte, short.或 char。 从 iiit 到 sbyte. byte, short, usliort. uint. ulong. 或 char。 从 uiiit 至U sbyte. byte, short, usliort. iiit.或 cliar0 从 long 至l sbyte. byte, short, ushort. iut. uint. ulong. cliai o 从 ulong 至ij sbyte. byre, short, ushoir. int, uint. l
10、ong.或 char。 从 char 到 sbyt巴 byte.或 short。 从 float 至9 sbyte. byte, slioit. ushort. inT. uiiit. long, ulong. char.或 decimal., 从 double HU s.bvte. byte, short, ushort. iiit. uint, long, ulong. char, float, or 或 26. 有一个元素类型为int的枚举类型E,则当执行从E到byte的显示枚举类型转换时,实 际上作的是从int到byte的显示数字转换;当执行从byte到E的显式枚举转换时,实 际上是执
11、行byte到int的隐式数字转换。如:Weekday day; day= (Weekday) 3;实际上 是E到byte的显示枚举类型转换。 27. 如何使用枚举: enum Color redO. yellow. bluegrcen.purple ; Color color_arr = new Color(); DOC格式. Color_arr=(Color) 2; Console. Wri teLine( Color_arr .0 .Color_arr); 则其输出结果为blue. 28. 賦值操作符(=)和条件操作符(?:)按照右结合的原则,即操作从右到左的顺序执 行。Y=(x10? 0
12、:1). 29. 枚举类型的加法:Weekday dayl=Weekday. Sunday; Weekday day2=Weekday. Saturday; Weekday day3二day 1+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操作符:ne鞭操作符用于创建一个新的类型实例。它有三种形式:1,对象创建表达式。 2,数组创建表达式。3代表创建表达式。 36. typeof操作符用于获得系统原型对象的类型。 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标签项后使用brenk语句或中转语句goto即不允许从一个case自动 遍历到其它case如果想遍历其它语句
15、,则可以加入下面两条跳转语句:goto case lable: 跳至标签语句执行。Goto default:跳至default标签执行。 7数组的初始化:int al=new int 12 3,4.5 &在事先知道循环次数的条件下,用for循环是比较方便的。 9. while语句中允许使用break语句来结束循环。也可以便用continue语句来停止嵌语句的执 行,继续进行while循环。 10可以使用break和continue语句来控制循环的表达。如:要求打印除7以外的0到9的语句, 只需要在到打印7的时候,跳出打印语句就可以了。For (int i=0; i9; i+) if i=7 c
16、ontinue;console write(i): 11. foreach(Myint x in Prime) 12预编译和条件编译都是以#开头的。可以帮助我们在程序执行过程中发出编译的错误或警 DOC格式. 告。 13. 溢出的处理用checked来检测。 14. 预处理指令如果出现在其它输入输出元素中间就不会被执行。中writeLine或Readline 等中间。 三类 1. C#中的类只支持单继承。 2. 对类成员的访问:1.公有成员。Publ ic,允许外部访问。2.私有成员。Private,只允许类 中的成员访问。派生类都不能访问。3.保护成员。Protected.方便派生类的直接访
17、问,同时 又希望对外部是隐藏的。4.部成员。Internal.对于同一包的程序或库是透明的。而对于包 外是隐藏的。 5类中的成员要么是静态要么是非静态。一般来说,靜态成员是属于类所有,非静态成员则 属于类的实例一对象。访问的时候:静态:类名.成员名;非静态:实例名成员名(this. 成员名)static 6.关键字const用于声明常量,后跟数据类型的声明。例:public const double x=l. 0; 7构造函数不声明返回类型,构造函数用于执行类的实例的初始化。 &折构函数在类的实例超出实用围时,我们希望收回它所占的存储时便用。析构函数跟类名 相同,只是在前面加上一个符号: 9值
18、参数:使用值参数时,初调用的方法不会修改存中实参的值。 引用型参数:引用型参数并不开辟新的存区域。当利用引用型参数向方法传递形参时,编译 程序将把实际参数所在存中的地址传递给方法。 10. substring(O.i)从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定 的长度oString, indexof (char)报告指定Unicode字符在此字符串中的第一个匹配项的索 引. 输出型参数:输出型参数也不开辟新存,跟引用型参数一样,只是引用型参数在使用的 时候不用需要对变量进行初始化,引用型参数用于传递方法的返回数据。 12. 如果形参中包含了数组参数,那么它必须在参数表中位于最
19、后。另外,参数只允许一维 数组。 13静态方法可以访问类中的靜态成员,但不能访问非靜态成员。但可以将类的实例当作参 数传递给方法使用,指明具体的调用对象,这时就可以操作实例的靜态和非靜态成员了。 14. 类的方法的重我:方法的名字相同,但参数个数或类型不同,编译器就能知道在什么时 候调用什么方法。 15. C#中,操作符重载总是在类中声明,并且通过调用类的成员方法来实现。操作符重载可 以适用于类的实例的操作。 16靜态域的声明用static修饰符。无论建立多少个该类的实例,存中只存在一个静态数据 拷贝。域相当于简单成员变量。在另一个类对靜态域的访问可以通过对靜态域所在类的 public方法进行
20、访问。 17.简单地说:const型表达式的值在编译时形成,而只读域static readon 1 y表达式的值在 程序运行时才形成。这种方法有利于版本的控制。 18对于靜态域,类在装载时对其进行初始化;对于非静态域,在类的实例创建时进行初始 化。 19虽然域和属性语法类似,但不能把属性当作变量那样使用。也不能把属性当作引用型参 数或输出型参数进行传递。在属性的访问声明中,对属性的值的访问用get关键字标出。对 DOC格式. 属性的值的写操作用set标出。 20不直接操作类的数据容,而是通过访问器进行访问,它借助get和set对属性值进行读写。 事件和索引指示器 1. 事件所声明的类型必须是一
21、个代表类型(delegate).代表类型应预先声明。 2. 在编写类的时候,我们可以编写事件向客户说明发生了什么事情。事件可以在类的厲性 或域中加以说明,但事件的类型必须是代表型的。我们可以预订事件确保事件初触发或 撤消触发。 3. 索引指示器为我们象使用数组那样为类或类的实例添加路径列表,通过下标进行访问类 中的信息。 4. 事件的声明格式:例:publ ic event eventhandler click;这个省略了事件访问声明。 5. public event eventhandler click。这个没有省略事件访问声明。大多数情况 下不用事件访问声明。 6. 索引指 示器:IPad
22、dress m arrayips;public void IPaddress thisint nindex get return m arrayipsint nindex: this代表实例,我们象使用数组那 样为类或类的实例添加路径列表.实例i实际上代表的是类中的属性或域的信息列 表。实例i 继承 1. C#中,一个派生类只能从一个类中继承。Object类为所有类的基类。 2虚方法:当类中的方法声明前加了 virtual,我们称为虚方法,它在执行时可以被派生 类改变。派生类中0verride+虚方法。虚方法在基类中定义,则基类运行虚方法时会实 际运行派生类中的方法。还必须指明,基类实例=派生
23、类实例。 3. 挂象类:abstract.抽象类只能作为其它类的基类,不能直接实例化。如果一个非抽象 类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员。抽象类是特殊 的虛类。 4. 在派生类中重新定义虚方法,要求方法名称,参数个数和类型必须与基类虚方法完全一 致。 5. 只能在抽象类中声明抽象方法。抽象类可以作为非抽象类的基类,也可以作为派生类。 我们可以利用抽象方法来重载基类虚方法,这时基类中的虚方法就被拦截了。 6. 密封类不能继承,密封类不能同时又是抽象类,抽象类总是希望被继承。密封类不可能 有派生类,如果密封类中有虚成员函数,则该成员可以转化成非虚的,virtual无效。
24、 7. 密封方法可以防止方法的重载。不是所有成员方法都可以作为密封方法,密封方法必须 对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰 符总是和override修符同时使用。 &抽象属性,抽象方法只允许在抽象类中声明。抽象类的这些成员交给派生类去实现。必 须在非抽象类中重载抽象属性,非抽象类不允许存在抽象成员。属性芦明时如果有 sea 1 ed,则必须同时有override.修饰符。 9. 抽象方法在派生类中不能用base关键字会访问。 接口 1. 每个组件都是独立的,有其独特的功能,只能通过接口与外界通讯,当一个组件需要提 DOC格式. 供新的服务时,可以通
25、过新的接口来实现。 2. 组件应该具有与编程语言无关的特性。组件模型是一种规,不管采用哪种语言设计组件, 都必须遵守这一规。 3. 在接口的声明体中,可以定义接口的成员,接口的成员可以是方法,属性,索引指示器 和事件。 4. 接口继承和类继承不同,接口继承只是说明继承。C#中类继承只能是单继承,但接口可 以是多继承。被继承的接口应该是访问得到的,不能从private或internal类型的接口 中继承。 5. 对一个接口的继承也就继承了这个接口的所有成员。 6. 接口成员不能是常量,域,操作符,构造函数或析构函数,而且不能包括所有的静态成 员。 7. 接口成员默认的访问方式是public,接口
26、成员声明不能包含任何修饰符。与不能加 abstract, public, protected,*. &如果底层成员的命名与高级成员的命名一样,那么底层成员将覆盖同名高级成员。但由 于接口的多继承性,如果两个父成员具有两个相同名的成员,这就产生了两义性,这时 需要显示声明,明确指出需要调用哪个父接口成员。 9. 我们只需要记住一点:一旦成员被擾盖以后,所有对其的访问都被覆盖后的成员“拦截”。 10. 接口定义不包括方法的实现部分,接口可以通过类和结构来实现。用类来实现接口的 时候,接口名称必须包含在类声明的基类列表中。如:class A: isequence, itest,如果 类实现了接口,那
27、么类也隐式地继承了该接口的所有父接口,不管这些父接口有没有在 类的声明的基类列表中出现。 11. 一个类可以实现多个接口。如果类中每个成员都明显地指出了被实现的接口,通过这种 途径被实现的接口我们称之为显式接口成员。显式接口成员只能通过接口调用,而不能 通过类调用。 12. 不能在方法调用,属性访问,以及索引指示器访问过全权名访问显式接口成员执行体。 事实上,显式接口成员执行体只通过接口的实例,仅仅引用接口的成员名称来访问。 13. 显式接口成员执行体的接口必须显式地出现在类的基类列表中,即使类隐式的实现了接 口。 14. 接口的成员包括它自己声明的成员,而且包括该接口所有父接口声明的成员。在
28、接口的 映射上,不仅要对接口声明中显式声明的所有成员进行映射,而且要对隐式地从父接口 中继承而来的接口成员进行映射。包括与父接口中相同名称的成员。 15. 类必须为所有基类表中列出的所有接口成员提供具体的实现。 16. 类中使用Private, protected和static修饰符的成员不能参与实现接口的映射。 17. 如果子接口成员要覆盖父接口的成员,成员的名字必须相同,而且子接口成员名称前用 new. 18. 一个类继承了它的基二的所有接口的实现。如果不显式的重新实现接口,派生类就 无法改变从基类中继承来的接口映射。 19. 显式说明的接口成员不能被声明为虚的。但可以通过显式接口实现调用
29、另一个方法,这 个被调用的方法可以声明为虚的。允许被派生类重载。 20. 继承了接口实现的类可以对接口进行重实现,这个接口要在类声明的基类列表中出现过 的。 21. 抽象类允许将接口的方法映射到抽象的成员方法。显式说明的接口成员不能是抽象的, 但它允许调用抽象的方法。 DOC格式. 组织应用程序 1. 使用普通的函数库,在程序时将库中的代码拷贝到可执行文件中,这叫靜态。 2. 动态库不一样,只有程序在使用时才将其拷贝,并且只有一份拷贝。动态库是一种程序 模块,它不仅包括可执行代码,而且通常还包括了各种类型的预定义数据和资源。 3. 装配有两种类型:应用程序和库。应用程序都有一个入口,能常扩展名为:.exe。库的 扩展名:.dll. 4. 名字空间的声明
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妊娠期糖尿病对母婴的影响
- 急诊科护理工作流程解析
- 护理工作中的沟通技巧
- 服装裁剪工岗前安全生产规范考核试卷含答案
- 合成碳膜电位器制造工安全实操水平考核试卷含答案
- 钽碳还原火法冶炼工岗前QC管理考核试卷含答案
- 生漆加工工操作水平评优考核试卷含答案
- 锅炉大件热处理工班组安全考核试卷含答案
- 通信网络电缆线务员安全实践模拟考核试卷含答案
- 丙烷脱氢装置操作工操作测试考核试卷含答案
- GB/T 20118-2025钢丝绳通用技术条件
- 信贷业务担保知识培训课件
- 艾滋病卡波西肉瘤课件
- 防护目镜使用课件
- 初中英语整体单元教学研究报告
- 3.1 世界是普遍联系的 课件 高中政治统编版必修4 哲学与文化
- 人教版高中高二《美术》选择性必修一-为眼睛做导游(建构画面)-教学设计
- 监狱智能管理系统
- 人造板行业政策与安全生产考核试卷
- ICD-9-CM-3手术编码6.0标准版-临床版新版字典库
- 桥梁伸缩缝破损更换工程全流程解析
评论
0/150
提交评论