C# 面试前的准备_基础知识点的回顾_01

本系列本章来至于http://www.cnblogs.com/LionelMessi/p/4311931.html

1.try{} 里面有个Return语句,那么紧跟try后面的Finally{}会不会执行?

答案:会执行,在Return后执行

喜欢研究透的同学可以参考:http://www.cnblogs.com/forcertain/archive/2012/11/22/2782855.html

我的记忆方法如下

public static int ExecuteNonQuery(string connStr, string sql)
{
  OleDbConnection conn = null;
try
{
  conn = new OleDbConnection(connStr);
  conn.Open();
  OleDbCommand command = new OleDbCommand(sql, conn);
  return command.ExecuteNonQuery();
}
catch
{
  return 0;
}
finally
{
  conn.Close();
}
}

这属于帮助记忆型,最好还是弄懂原理

2.Using有什么用.

答:很多同学看到这个就笑了,不就是namespace的引用嘛,殊不知,出题人正在等你更精彩的回答呢。

Using还可以实现非托管资源的释放,实现了IDisposiable类在Using中创建,Using结束后会自动调用Dispose方法回收资源,其等价于try...finally

以上可以参考:http://www.cnblogs.com/miniwiki/archive/2010/05/13/1734307.html

这个时候面试官就笑了,绵里藏针的问,什么是非托管资源,托管资源.这个时候接不上就暴露了背书了吧。

托管资源:一般是指被CLR控制的内存资源,这些资源由CLR来管理。可以认为是.net 类库中的资源。

非托管资源:不受CLR控制和管理的资源,比如文件流,数据库的连接,网络连接,系统的窗口句柄,打印机资源等,这类资源一般不存在堆上。可以认为操作系统资源的一组API。

对于托管资源,GC负责垃圾回收。对于非托管资源,GC可以跟踪非托管资源的生存期,但是不知道如何释放它,这时候就要人工进行释放。

然后面试官就会继续问GC回收机制巴拉拉一大推了,直到你回答不上来为止.

3.Readonly 同Const区别

是不是又被简单到了?

首先先解释下什么是静态常量以及什么是动态常量。静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值。而动态常量的值则是在运行的那一刻才获得的,编译器编译期间将其标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化。

基本了解以上后,就可以对号入座了。const修饰的常量是上述中的第一种,即静态常量;而readonly则是第二种,即动态常量。那么区别可以通过静态常量与动态常量的特性来说明

1)const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化

2)const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候

此外const常量既可以声明在类中也可以在函数体内,但是static readonly常量只能声明在类中。

以上摘自:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

上一篇:Java基础知识强化之IO流笔记62:三种方式实现键盘录入


下一篇:docker安装testlink