析构函数(destructor) 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。
注意如果派生类的方法和基类的方法同名则基类中的方法将会被隐藏如果需要隐藏则可以使用关键字new来隐藏如果不写new关键字默认处理为隐藏虽然基类中同名的方法被隐藏了但是还是可以通过base关键字来调用
进程和线程的区别?
进程是系统进行资源分配和调度的单位;
线程是CPU调度和分配的单位,一个进程可以有多个线程,这些线程共享这个进程的资源。
堆和栈的区别:
栈:由编译器自动分配、释放。在函数体中定义的变量通常在栈上。
堆:一般由程序员分配释放。用new、malloc等分配内存函数分配得到的就是在堆上。
概述:
栈(Stack)由系统管理生存期,存储代码执行和调用路径,执行或调用完毕即从栈中清除;
堆(Heap)中保存值和对象,调用完毕之后依然存在,由垃圾回收器查找栈中有无指向该值或对象的引用,无则从堆中删除
C# ref与out区别:
1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
你对泛型了解吗?简单说明一下泛型的有什么好处?
泛型:通过参数化类型来实现在同一份代码上操作多种数据类型。利用“参数化类型”将类型抽象化,从而实现灵活的复用 好处是——类型安全和减少装箱、拆箱。提高性能、类型安全和质量,减少重复性的编程任务
C#中所有对象共同的基类是什么? System.Object.
如何在C#中实现继承? 在类名后加上一个冒号,再加上基类的名称。
私有成员会被继承么? 会,但是不能被访问。所以看上去他们似乎是不能被继承的,但实际上确实被继承了。 (是有成员能够被继承,但是不能够被访问)
new的三种用法
答:实例化对象,隐藏基类方法。
运算符(创建对象,创建值类型的默认构造函数)
修饰作用(隐藏基类中的继承对象,子类中的对象覆盖基类中的版本)
string是值类型还是引用类型?引用类型
String类与StringBuilder类有什么区别?为什么在.Net类库中要同时存在这2个类?
(简答)stringBuilder比string更节约内存,所以stringBuilder更快String 对象是不可改变的。
每次使用 System.String 类中的方法之一或进行运算时(如赋值、拼接等)时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。而 StringBuilder 则不会。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。
如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。
Session有什么重大BUG,微软提出了什么方法加以解决?
答:是iis中由于有进程回收机制,系统繁忙的话Session会丢失,可以用Sate server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件
c#中的三元运算符是 ?:
.能用foreach遍历访问的对象需要实现(Ienumber) 接口或声明 ( GetEnumerator)方法的类型。
.<%# %> 和 <% %> 有什么区别?
<%# %>表示绑定的数据源 <% %>是服务器端代码块
C#可否对内存进行直接的操作?