Const 和Readonly的区别
|
Const |
Readonly |
是否显式赋初始值 |
是 |
否(可以取默认值) |
修饰类型 |
不能为Strut |
所有类型 |
是否为static |
默认static(不能显式定义) |
没有这个性质 |
修饰局部变量 |
可以 |
不可 |
赋值方式 |
常量(可以依赖其它常量) |
可以用变量或表达式赋值 |
考虑重点(只读性) |
要求“编译”时是只读(常量)的 |
运行是只读(常量)的 |
注:局部变量唯一可用的修饰符是Const
注:非虚方法的调用是以引用的类型作为依据的,虚方法的调用是以对象实例的类型为依据的
is 和 as 运算符
Is用于检查对象的运行时类型是否与给定的类型兼容,格式如下:
表达式 is 类型
满足以下条件,被认为是true:
1. 表达式不是Null
2. 表达式可以转换成相应类型 而不引发异常 P177
注:转换分两种:
1. 子类对象可以直接转换成父类
2. 父类对象的引用实际指向的是一个子类对象,可用强制类型转换
******************************************************************************
As是强制类型转换,格式:
表达式 as 类型
1.功能相当于强制类型转换
于强制类型转换的不同点:
1. as只能用于引用类型,不能用于值类型
2. 在运行时,如果不能转换,不会抛出异常,及时计算结果为null(不同于强制类型转换)
类型相等的判断:
1. 值类型相等的判断
2. 引用类型相等的判断 // 判断两个引用是否指向同一对象
3. 字符串的相等:虽然string类型是引用类型,但是string类已经对“==”“!=”运算符作了重载,所以string类型的比较是比较字符串的内容是否相等,而不是比较引用。P181
构造函数的执行过程
继承:
1. 不能继承构造函数
2. 可以继承私有成员,但访问权限有所控制
私有成员的可访问域只包括声明该成员的类型的程序文本。在下面的示例中

2



3

4



5

6

7

8

9



10



11

12

13

14

类 B 继承类 A 的私有成员 x。因为该成员是私有的,所以只能在 A 的"类体"中对它进行访问。因此,对 b.x 的访问在 A.F 方法中取得了成功,在 B.F 方法中却失败了。
请描述一下修饰符protected internal。
在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。即protected的范围 + internal的范围。
c#中使用反射显示程序集的所有类型和属性