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.委托和事件

委托是一个类型,用来引用具有相同放回值和参数的方法。

事件是一个特殊的多播委托。

posted @ 2014-07-28 22:10  penney  阅读(164)  评论(0)    收藏  举报