东玉龙收集整理
/#?@是类型安全的集合对象;
3## ?AB@也是类型安全的集合对象;
17) 谈谈 const 与 readonly 的区别?
答案:
默认是静态的,只能由类型来访问,不能和 # 同时使用,否则出现编
译错误;! 默认是非静态,由实例对象来访问,可以显式使用 # 定义为
静态成员。
只能应用在值类型和 #( 类型上,其他引用类型常量只能定义为
,否则以 为 引用类型常量赋值,编译器会引发“只能用 对饮用
类型(字符串除外)的常量进行初始化”错误提示,原因是构造函数初始化是在
运行时,而非编译时;! 只读字段,可以是任意类型,但是对于引用类型
字段来说,! 不能限制是对该对象实例成员的读写控制。
必须在字段声明时初始化;而 ! 可以在声明时,或者函数中进行
初始化,不同的构造函数可以为 ! 常量实现不同的初始值。
可以定义字段和局部变量;而 ! 则只能定义字段。
定义时必须初始化;而 ! 定义时可以不进行初始化,但是微软强
烈建议在定义时进行初始化操作,否则 ./0 将根据其类型赋予默认值。
数据和结构体不能声明为 变量,#( 类型可以被声明为常量,其源于
#( 类型的字符串恒定特性,使得 #( 的值具有只读特性。
从应用角度来看,对于恒定不变且单独使用的量来说,应该考虑声明为
变量,例如圆周率、性能比、折扣率、百分比等;而对于可能随实际运行
发生变化的量,应该考虑声明为 ! 常量,例如日期或时间,数据库中的主
键 3 等。
18) String 与 StringBuilder 的区别?
答案:
#( 对象是不可变的B它有固定长度B每次使用它的时候B我们都要从内存中重
新分配空间给他B如果我们重复修改它B那么内存开销是比较大的。
比如#(C6DEF
C6DEGDEGDEF
最后 C 的值为“EB其实这个 C 已经不是原来的那个 CB内存已经为它重新分配
了空间。
如果我们要修改字符串而不创建新的对象,则可以使用#(H#!。例如,
当在一个循环中将许多字符串连接在一起时,使用#(H#! 类可以提升性能。
虽然#(H#! 对象是动态对象,允许扩充它所封装的字符串中字符的数
量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,
不应将它与当前#(H#! 对象容纳的字符串长度混淆在一起。例如,可以创
建#(H#! 类的带有字符串“* E(长度为)的一个新实例,同时可以指
定该对象的最大容量为 。当修改#(H#! 时,在达到容量之前,它不会为
其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使
用重载的构造函数之一来指定#(H#! 类的容量。下面的示例指定可以将
2#(H#!对象扩充到最大个空白。比如:
#(H#!2#(H#!6#(H#!&I* ; !JIB'FK
我们也可以通过 .#属性来设置对象的最大长度。比如:
2#(H#!.#6F