C#学习笔记

1、C#变量命名可以以邮件符@开头

2、C#中字符串值可以@开头,如此该字符串则是逐字指定的字符串,两个双引号中的任意字符都作为字符串处理,特殊字符也不需要转义,但是双引号需要,否则会被视为字符串的结束。
如:"asdasd:
item1
item2"

3、C#支持goto语句

4、C#的switch语句不允许从一个case的执行语句进入下一个case的执行语句,因此必须在每一个case的语句之后添加一个break以中断执行,即使是default也需要添加break;一个例外是多个case堆叠在一起,其后再加入执行语句,这样是可以的(不能先进入一个case,再进入另一个case)。

5、两个short类型数相乘的结果类型是int。

6、C#中的数组分为矩阵数组和锯齿数组, 矩阵数组的行列都很整齐,每行都有相同的元素个数;而锯齿数组这允许每行有不同的元素个数,即数组的数组。
矩阵数组定义:int[,] arr = new int[3,4]
锯齿数组定义:不能这样初始化:int[][] arr = new int[3][4],
可以 int[][] arr = new int[3][],然后依次定义子数组:arr[0] = new int[3]; arr[1] = new int[4]
或者 int[][] arr = new int[2][] { new int[] {1,2,3}, new int[] {1} }
或者 int[][] arr =  { new int[] {1,2,3}, new int[] {1} }
这种锯齿数组C++不能实现,但是Java可以实现。

7、C#的delegate关键字是委托变量的定义,可以将具有相同参数和返回值类型的函数定义成delegate,(实际上可以理解成函数类型),从而使用委托变量来调用类型相同但是功能不同的函数。

8、C#的面向对象,继承也是单继承多实现。

9、C#的变量分为值类型和引用类型,简单类型(int等)大多数都是值类型,而string、数组和类实例都是引用类型;值得注意的是,结构类型也是值类型,虽然看上去像是类一样。

10、C#中定义的类默认是内部的,也可以使用internal关键字显示指定,内部类即只有当前项目的代码才能访问它。要其他项目中的代码可以访问,需要定义时添加关键字public。同时可以定义类为抽象类(使用关键字abstract。不能实例化,但是可以被继承,可以有抽象成员),也可以定义类为密封的(使用关键字sealed,不能被继承)
在C#的类定义中,派生类的可访问性(public或者internal)不能高于基类。

C#中的类可以是static的,static class是静态类,其中所有成员都必须是static的,同时不能用new初始化实例,可以有静态构造函数,在调用静态类的静态方法时会自动调用静态构造函数(而且只会调用一次)。参考:http://blog.csdn.net/xiaobai1593/article/details/7278014

11、接口定义使用interface,其可访问性定义同类相似,默认是internal的。但是接口定义不能使用abstract和sealed关键字,这两个关键字对接口没有意义。

12、类在初始化时会调用构造函数,可以使用this关键字来调用类的其他构造函数,使用base关键字来调用基类的不同构造函数,从而构造出更加复杂的构造函数执行序列。

13、C#的类成员主要有三种:字段、方法和属性,这些成员可以使用public、private、internal和protected进行修饰。没有使用关键字修饰,访问级别默认是private,也可以定义protected internal成员,这样它就只能有项目中派生类的代码访问。
关于字段定义:
(1)定义字段时可以用关键字readonly修饰,这样该字段就只能在执行构造函数的过程中初始化或者赋值
(2)字段可以是静态的,即static;同时,const成员也是静态的,而且const成员不能使用static修饰

关于方法的定义:
(1)方法定义可以使用virtual修饰,表示该方法可以被子类重写;子类在重写该方法时也必须使用override修饰重写方法。当使用override重写了方法,则可以使用sealed修饰该重写方法不能再被其子类重写了,注意,sealed修饰方法时,只能跟override一起使用。
(2)abstract,只能在抽象类中使用,该关键字修饰的方法必须在非抽象的子类中重写,重写时仍然需要使用override关键字
(3)可以使用extern关键字将方法定义放在外部其他地方

关于属性定义:参考http://www.jb51.net/article/48324.htm
属性与字段最大的不同就是:属性有两个函数块(访问器),get和set块,可以获取和修改属性的值,可以控制对属性的访问级别,同时get块和set块也可以有自己的可访问性,但是其访问性不能大于属性的可访问性。
属性也可以添加virtual、abstract、override和sealed关键字修饰,但是字段不能。

14、可以使用new关键字来修饰子类中与父类完全相同的方法(方法的实现内容不同,而且父类中该方法可以没有使用virtual修饰,子类中该方法也必须没有使用override修饰),显示的隐藏父类中该方法,也可以不用new关键字,这样只会产生一个警告。

15、跟Java相似,C#中也有表示父类对象和子类对象的关键字。在子类的代码中,base表示其父类对象,this表示该子类对象本身。

16、interface定义接口,接口成员与普通的类成员的重要区别:
(1)接口中的所有成员都是公共的,不允许使用访问修饰符
(2)接口成员不能包含代码体
(3)接口成员不能有字段
(4)接口成员不能使用static、virtual、abstract或者sealed修饰定义,因为不需要
(5)接口内部也不能嵌套定义类型成员
接口可以继承接口,如果要隐藏父接口也是使用new关键字

17、C#代码中可以使用#region XXX   各种代码   #endregion来对代码分组折叠

18、支持partial关键字进行部分类定义,可以将一个类的定义放在不同的多个文件中,只需要在每个文件的类定义处添加一个partial关键字对class进行修饰。同时部分类中也可以包含部分方法,就是方法的定义和实现在不同的地方,需要在方法前都添加partial关键字。

19、集合相比数组的优势是大小是变长的,可以控制对包含对象的访问、搜索和排序等。

20、可以实现ICloneable接口来对对象做深拷贝。

21、可以将简单类型变量封箱变成Object或者接口,也可以进行拆箱强制类型转换回去。is和as运算符则会涉及封箱和拆箱的功能,is是判断一个类型是否是另一个类型,而as是将一个类型转换成另一个类型。

22、C#中有一个双问号运算符:??,这个运算符就是对可空变量的处理:
op1 ?? op2 和 op1 == nulll ? op2 : op1 的作用是相同的。

23、C#中的泛型强类型化集合类都在名称空间System.Collections.Generic下,当然在System.Collections下还有很多非强类型化集合类,这些集合元素在取出来时都是object类型,需要强制转换才能使用,而Generic下的集合则不需要。

24、在定义泛型类时,需要注意泛型T可能是值类型也可能是引用类型,是值类型这不能赋值为null,为此,可以使用关键字default,default(T)会根据T的实际类型得到null或者0。

25、dynamic关键字可以定义动态类型变量,不确定变量的实际类型。但这仅仅是编译期间存在,在运行期间,会被替换成System.Object类型。如果动态变量在访问其不存在的成员时会产生异常。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值