几个.NET方面的问题
这几天又拿来《CLR via C#》翻看,想了几个.NET方面的问题,加上在公司和同事们交流时遇到的问题。大家有兴趣可以看看,能不能回答上来呢?
1. 为什么要显式地关闭StreamWriter?
2. 如何正确地重写GetHashCode方法?(这个是最简单的)
3. C#编译器为什么要用callvirt指令调用实例的非虚方法?
4. struct可以继承吗?为什么?可以有虚方法吗?为什么?
5. 什么时候用const,什么时候用static readonly?他们有什么区别?
6. C#为什么要提供析构函数?或者说什么时候用析构函数比较合理?
7. 有时,程序的Debug Build可以正常运行,而Release Build不能正常运行。一般可能会是什么原因?
其中1, 2, 3, 5, 7可以在《CLR via C#》中分析出答案。其它的……大家讨论讨论吧。尤其是第4个问题。可能有人认为这种问题没有意义。语法如此,怎么规定的就怎么用就是了。但是C#或CLR团队这么规定一定会有他们的想法,他们的理由,如果不这样一定有什么问题。