C#随想经典(原创)

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.       可以继承私有成员,但访问权限有所控制

私有成员的可访问域只包括声明该成员的类型的程序文本。在下面的示例中

 1None.gifclass A 
 2ExpandedBlockStart.gifContractedBlock.gifdot.gif
 3InBlock.gifint x ; 
 4ExpandedSubBlockStart.gifContractedSubBlock.gifstatic void F(B b) dot.gif
 5InBlock.gifb.x = 1 ; // 对 
 6ExpandedSubBlockEnd.gif}
 
 7ExpandedBlockEnd.gif}
 
 8None.gifclass B: A 
 9ExpandedBlockStart.gifContractedBlock.gifdot.gif
10ExpandedSubBlockStart.gifContractedSubBlock.gifstatic void F(B b) dot.gif
11InBlock.gifb.x = 1 ; // 错误 
12ExpandedSubBlockEnd.gif}
 
13ExpandedBlockEnd.gif}
  
14None.gif

B 继承类 A 的私有成员 x。因为该成员是私有的,所以只能在 A "类体"中对它进行访问。因此,对 b.x 的访问在 A.F 方法中取得了成功,在 B.F 方法中却失败了。

请描述一下修饰符protected internal
在同一个Assembly中,他的访问级别和public一样,而跨Assembly访问时,他的访问级别同protected一样。即protected的范围 + internal的范围。

 

c#中使用反射显示程序集的所有类型和属性

转载于:https://www.cnblogs.com/lanshh/archive/2006/06/29/438276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值