C#中Equals和==区别
C#提供值类型和引用类型,值类型存储在栈上,故用==判断是直接判断其值是否相等,因为值类型不存在堆中的数据因此值类型的Equals也是判断数据。即,对于值类型而言,==与Equals相同,均是判断其值是否相等。
对于引用类型而言,其栈中存储的是对象的地址,那么==就是比较两个地址是否相等,即是否指向同一个对象;Equals函数则是比较两个对象在堆中的数据是否一样。
class和struct的区别
class和struct最本质的区别是class是引用类型,而struct是值类型。class(类)是面向对象编程的基本概念,所有的类都最终继承自System.object类,因此是一种引用类型。struct (结构是一种值类型,所有的结构都继承自System.ValueType类,struct实例在创建时分配在线程的堆栈(stack)上。
Sealed的作用是?
sealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写。sealed关键字的作用: 在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。
const (常量)和readonly (只读)的区别
答:const 与readonly相同点: 运行期间都只能读取不能更改
1)const定义时即初始化,运行期间无法再初始化;readonly除了在定义时可以初始化外,还能在运行期间的构造函数中初始化,实例只读变量只能在实例构造函数中初始化,静态只读变量只能在静态构造函数中初始化
2)const定义的变量只能通过类名称访问,而readonly会根据其是否定义为静态类型而分别通过对象与类名称访问
3)const只能定义值类型与字符串,若定义引用类型则初始化值必须为null,而readonly无此限制,可以定义引用类型时初始化为null,在对应的构造函数中再重新初始化
ref参数和out参数是什么?有什么区别?针对函数 (方法)的参数的
(1)使用 ref 参数时,传入的参数必须先被初始化。对 out 参数而言,必须在方法中对其完成初始化。
(2)使用 ref 和 out 时,在方法的参数和执行方法时,都要加ref 或 out 关键字,以满足匹配。
(3)out 适合用在需要 return 多个返回值的地方,而 ref 则用在需要被调用的方法,修改调用者的引用的时候。
什么时候选择用ref ?什么时候选择用out ?
1) ref 的使用:使用 ref 进行参数的传递时,该参数在创建时,必须设置其初始值,所以ref 侧重于修改;
2)out 的使用:采用 out 参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须初始化,所以 out 侧重于输出。