c# 面试常见问题
1. 值类型 和引用类型的区别
c# 所有类型分为以下四种类型。
值类型
引用类型
泛型参数
指针类型
值类型包含系统内置的类型,数字类型,字符类型,布尔类型和自定义的结构体和枚举
引用类型包含所有的类,数组,委托,接口 包括string
1.
而这最大的区别是对内存的处理
值类型每次赋值就是一次内存拷贝
引用类型在内存中有两部分组成:对象,和这个对象的引用。 所以引用类型每次赋值,都是拷贝引用,不是对象。
2.
引用类型可以赋值null ; 值类型不可以(会编译错误)。
3.
值类型在内存中开销很精确, multiple of the fields’ size :比如 struct A { byte b; long l; } 16个字节 。 8的倍数
应用类型至少一个8位的字节保存引用, 还有其他临时的信息,比如,GC的管理和多线程加锁状态。
2.constant versus static readonly
1.系统内置的类型包括string 都可以使用constant 修饰,声明时就要赋值,在编译时期估值,以后不允许修改值。 其他引用类型也可以使用constant 比如 constant myclass = null 。不可以 constant myclass = new myclass () 。(因为不能在运行时计算,如果这么写, 就没有意义啦)
void Calculate(int Z)
{
const int X = 10, X1 = 50;
const int Y = X + X1; //no error, since its evaluated a compile time
const int Y1 = X + Z; //gives error, since its evaluated at run time
}
2.readonly 可以在声明是赋值(若不赋值,怎为默认) 和 构造函数中赋值(运行时赋值), 委托 和event 不可以用readonly
3. static versus sealed class ?
This may help you:
Class Type:----------------------normal ------- static--------sealed----------abstract
Can be instantiated:------------yes-------------no--------------yes----------------no
Can be inherited:----------------yes-------------no--------------no-----------------yes
Can inherit from others:-------yes-------------no--------------yes----------------yes
4.委托和事件
委托是一个类型,用来引用具有相同放回值和参数的方法。
事件是一个特殊的多播委托。

浙公网安备 33010602011771号