C#学习笔记
1.C#具有所有面向对象的语言的所有特性:封装,继承,多态。在C#系统中,所有的类型都可以看作一个对象.C#只允许单继承,即一个类不会有多个基类,C#不会有全局函数,不会有全局变量,不会有全局常数,所有的一切只能封装在一个类中.
2.包括四个部分:vos类型系统;元数据;公用语言规范;虚拟执行系统。
3.using system表示导入名称空间.
4.让我们从第一个程序开始就记得:每个东西都必须属于一个类,类里面的方法总是为我们完成某件工作的.在C#中,程序的执行总是从main()方法开始的,一个程序中不允许出现两个或两个以上的main()方法。对于习惯学C控制台程序的读者,必须要牢记:main()方法必须包含在一个类中。
5.利用string可以方便地对字符串进行连接或剪切。例:string s="good"+”morning”;char x=s[3]字符串可以通过下标进行索引,得到一个字符。
6.我们可以用//进行单行标注,/* */进行多行标注。
7.在C和C++中,任何非0值都表示真,在C#中,任何非0值都不能代替true。在其它类型的整型值和布尔值之间不存在任何的转换,将整型转换成布尔型是不合法的。。
8.把一系列相关的变量组织成单一实体的过程称为生成结构的过程.这个单一实体的类型叫结构类型,每一个变量就是结构的成员。
9.结构类型包含的成员类型可以相同,也可以不同.我们甚至可以把一个结构类型当作另一个结构成员的类型。
10.枚举实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号。结构类型变量的值由各个成员的值组合而成。而枚举则不同,枚举类型的变量在某一时刻只能取枚举中某个元素的值。按照系统的设定,每个元素的类型都为整型。且第一个元素的值为0,后面的每个元素梯加1,也可以直接赋值。如把前面第一个元素的值设为1,后面的元素不用设,系统自动将后面元素的值递加1。
11.C#中另一大数据类型是引有类型.其含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值。也就是说引用类型存储实际数据引用值的地址。
12.类是面向对象编程的基本单位,是一种包含数据成员,函数成员和嵌套类型的数据结构.类和结构都包含了自己的成员,但它们的区别是:类是引用类型 ,而结构是值类型。
13.如果我们对某个类定义了一个变量 ,则我们就将它称为类的一个实例。
14.我们常用到的类:object类.这个类是其它所有类的基类,其它类型可以直接或间接地从object类中继承.因此,对一个object类的变量可以赋于任何类型的值。
15.代表?在声明代表时,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出类型的参数.如:delegate 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才是变量,是类的一个实例。在这里,这个delegate的名字是Mydelegate,也并不是一个变量。
16.变量从用户角度来说,是存储信息的基本单元,从系统角度来说,变量就是计算机内存中的一个储存空间.
17.静态方法不能用类的实例来访问,必须用类名来访问。
18.数组的声明:数组的类型 [数组的元素个数] 数组的名字;数组个数可以通过数组名加圆点加Length获得.如arr。Length表示arr数组的个数
19.在进行批量处理数据的时候,我们要用到数组.数组是一组类型相同的有序数据。
20.数组的初始化:int[] a1=new int[]{1,2,3};为什么是new int[],而不是new a1呢:因为int[]是类型,a1是int[]类型的一个实例.而且a1所代表的是{1,2,3},并不是函数。与delegate int Myclass();不同,Myclass()虽然是一个名字,但它可以代表一个函数,不是常数.原则:类型后面的名字如果可以代表函数,则这个名字就是一种类型.如果类型后面的名字代表常数,则这个名字不是一种类型,只是类型的一个变量.或者可以用另一种说法:如果名字后面含有(),{},[]则在赋值或设定实例的时候new后面要用该名字作为类型.
21.变量名不能与C#中的关键字名称相同;变量名不能与C#中库函数名称相同。
22.静态变量:static int a;一旦静态变量所属的类被加载,直到包含该类的程序运行结束前它将一直存在。
23.稳性数据转换实际上就是从低精度的数据转换成高精度的的数据类型。如:ushort转换成int。
24.隐式枚举转换允许把十进制数0转换成任何枚举类型,对其它整数则不存在这种隐式转换.
25.从元素类型为TS的数组类型S到元素类型为Tt的数组类型T转换,如果元素类型为值类型,则不能进行隐式转换。
26.有一个元素类型为int的枚举类型E,则当执行从E到byte的显示枚举类型转换时,实际上作的是从int 到byte的显示数字转换;当执行从byte到E的显式枚举转换时,实际上是执行byte到int的隐式数字转换.如:Weekday day;day=(Weekday) 3;实际上是E到byte的显示枚举类型转换。
27.如何使用枚举:
enum Color
{
red=0, yellow, blue,green,purple
};
Color color_arr = new Color();
Color_arr=(Color) 2;
Console。WriteLine(“Color_arr{0}”,Color_arr);
..
则其输出结果为blue。
28.赋值操作符(=)和条件操作符(?:)按照右结合的原则,即操作从右到左的顺序执行.Y=(x〉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,不相同时异或运算为1.移位运算,左称位将操作数向左位移,高位被
抛弃,低位顺序补0.右移运算时,如果X为非负数,最高位设为0;如果X为负数,最高位设为1,即最大为-1。
34.自增自减操作符:自增自减操作符有前缀和后缀之分.对于前缀操作符,遵行的原则是“先增减,后使用”,后缀则相反,“先使用,后增减".
35.new操作符:new操作符用于创建一个新的类型实例。它有三种形式:1,对象创建表达式。2,数组创建表达式.3代表创建表达式。
36.typeof操作符用于获得系统原型对象的类型。
37.check 和 uncheck操作符只影响其置于括号中的运算的溢出检查。
二 流程控制
1.C#提供的选择语句有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自动遍历到其它case.如果想遍历其它语句,则可以加入下面两条跳转语句:goto case lable:跳至标签语句执行。Goto default:跳至default标签执行。
7。数组的初始化:int[] a1=new int][]{1,2,3,4,5}
8.在事先知道循环次数的条件下,用for循环是比较方便的.
9.while语句中允许使用break语句来结束循环。也可以使用continue语句来停止内嵌语句的执行,继续进行while循环。
10。可以使用break和continue语句来控制循环的表达。如:要求打印除7以外的0到9的语句,只需要在到打印7的时候,跳出打印语句就可以了.For(int i=0;i〈9;i++){ if i==7 continue;console.write(i);}
11.foreach(Myint x in Prime){
12。预编译和条件编译都是以#开头的。可以帮助我们在程序执行过程中发出编译的错误或警告。writeline方法属于类
13。溢出的处理用checked来检测。
14。预处理指令如果出现在其它输入输出元素中间就不会被执行.中writeLine或Readline等中间。
三 类
1.C#中的类只支持单继承.
2。对类成员的访问:1。公有成员。Public,允许外部访问。2。私有成员。Private,只允许类中的成员访问.派生类都不能访问。3。保护成员.Protected。方便派生类的直接访问,同时又希望对外部是隐藏的。4。内部成员.Internal。对于同一包内的程序或库是透明的。而对于包外是隐藏的。
5.类中的成员要么是静态要么是非静态。一般来说,静态成员是属于类所有,非静态成员则属于类的实例-对象.访问的时候:静态:类名.成员名;非静态:实例名。成员名(this。成员名)static
6. 关键字const用于声明常量,后跟数据类型的声明。例:public const double x=1.0;
7.构造函数不声明返回类型,构造函数用于执行类的实例的初始化。
8.折构函数在类的实例超出实用范围时,我们希望收回它所占的存储时使用.析构函数跟类名相同,只是在前面加上一个符号:~
9.值参数:使用值参数时,初调用的方法不会修改内存中实参的值。
引用型参数:引用型参数并不开辟新的内存区域。当利用引用型参数向方法传递形参时,编译程序将把实际参数所在内存中的地址传递给方法。
10。substring(0,i) 从此实例检索子字符串。子字符串从指定的字符位置开始且具有指定的长度。String.indexof(char) 报告指定 Unicode 字符在此字符串中的第一个匹配项的索引。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论