1、什么是强类型?什么是弱类型?
答:强弱类型是指类型检查的严格程度,语言有无类型、弱类型。强类型3种。无类型不检查且不区别指令和数据;弱类型检查很弱,仅能严格地区分指令和数据;强类型则严格地在编译的时候进行检查。例如,C语言和Javascript是弱类型语言,Java和C#都是强类型语言。
2、CTS、CLS、CLR分别作何解释?
答:CTS(Common Type System)是通用类型系统,主要用于解决不同语言的数据类型不同的问题,它是一种类型标准,在这个标准中不但实现了COM的变量兼容类型,还定义了通用用户自定义类型的方式来进行类型扩展,所以以.NET平台为目标的语言通过建立本身数据类型与CTS之间的映射来实现与其他语言的数据类型的交互。
CLS(Common Language Specification)是公共语言规范,主要用于实现多种语言之间的交互操作性,是公共语言运行库的子集。
CLR(Common Language Runtime)是公共语言运行时,它是所有.NET应用程序运行时的环境,所有应用程序都要使用的编程基础,它如同一个支持.NET应用程序运行和开发的虚拟机。
3、为什么在C#中我们不用担心类型漏洞?
答:GC是垃圾收集器,C#程序员不用担心内存管理,因为垃圾收集器会自动进行管理。如果要请求垃圾收集器,可以使用下面的方法之一:
System.gc(); Runtime.getRuntime().gc();
4、什么是受管制的代码?
答:受管制的代码即为非托管代码。
托管代码是公共语言运行库执行的代码,托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等,这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。
非托管代码是在公共语言运行库的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务,它与托管代码不同,后者从公共语言运行库中获得这些服务。
5、谈谈final、finally和finalize的区别
答:final是一个修饰符,如果一个类被声明为final,意味着他不能再被派生出新的之类,不能作为父类被继承;如果变量或方法声明为final,可以保证他们在引用的使用中不能被改变,被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改;被声明为final的方法也同样只能使用不能重载。
finally用来在异常处理时执行任何清除操作,如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally(如果有的话)
finalize是一个方法名,这个方法时在垃圾收集器删除对象之前对这个对象调用的,它是在Object类中定义的,因此所有的类都继承了它。之类覆盖finalize方法整理系统资源或者执行其他清理工作。
6、C#、Java和C++的比较
比较项目 | C# | Java | C++ |
完全面向对象 | 是 | 是 | 不是 |
多继承 | 不支持 | 不支持 | 支持 |
指针 | 只能在非托管代码中使用 | 不支持 | 允许大量使用 |
中间语言处理 | 将MSIL转换为JIT机器码 | Java字节流 | 无 |
内存管理 | 采用垃圾回收机制 | 采用垃圾回收机制 | 显示删除内存 |
变量 | 不允许使用未经初始化的变量 | 不允许使用未经初始化的变量 | |
异常处理 | try-catch-finally | try-catch-finally |
7、如何手动释放资源?
答:.NET平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收工作,但在以下两种情况下需要手动进行资源释放。
- 由于它无法对非托管资源进行释放,所以必须自己提供方法来释放对象内分配的非托管资源,比如在对象的实现代码中使用过一个COM对象;
- 类在运行时会产生大量实例,必须自己手工释放这些资源以提高程序的运行效率。
手动释放资源最理想的办法是通过实现一个接口显示地提供给客户端手工释放对象,System命名空间内有一个IDisposable接口,用在这里非常合适。