整型和布尔数据类型是完全不同的类型。这意味着if判别式的结果只能是布尔数据类型,如果是别的类型则编译器会报错。那种搞混了比较和赋值运算的错误不会再发生。<br> (2)现代性<br> 许多在传统语言中必须由用户自己来实现的或者干脆没有的特征,都成为基础C#实现的一个部分。金融类型对于企业级编程语言来说是很受欢迎的一个附加类型。用户可以使用一个新的decimal数据类型进行货币计算。<br> 安全性是现代应用的头等要求,c#通过代码访问安全机制来保证安全性。根据代码的身份来源,可以分为不同的安全级别,不同级别的代码在被调用时会受到不同的限制。<br> (3)面向对象<br> c#支持面向对象的所有关键概念:封装、继承和多态性。整个c#的类模型是建立在.NET虚拟对象系统(VOSVirtualObjectSystem)之上的,这个对象模型是基础架构的一部分,而不再是编程语言的一部分——它们是跨语言的。<br> C#中没有全局函数、变量或常数。每样东西必须封装在一个类中,或者作为一个实例成员(通过类的一个实例对象来访问),或者作为一个静态成员(通过类型来访问),这会使用户的C#代码具有更好的可读性,并且减少了发生命名冲突的可能性。<br> 多重继承的优劣一直是面向对象领域争论的话题之一,然而在实际的开发中很少用到。在多数情况下,从多个基类派生所带来的问题比这种做法所能解决的问题要更多,因此C}}的继承机制只允许一个基类。如果需要多重继承,用户可以使用接口。<br> (4)类型安全性<br> 当用户在C/C++中定义了一个指针后,就可以自由地把它指向任意一个类型,包括做一些相当危险的事,如将一个整型指针指向双精度型数据。只要内存支持这一操作,它就会凑合着工作,这当然不是用户所设想的企业级编程语言类型的安全性。与此相反,C}}实施了最严格的类型安全机制来保护它自身及其垃圾收集器。因此,程序员必须遵守关于变量的一些规定,如不能使用未初始化的变量。对于对象的成员变量,编译器负责将它们置零。局部变量用户应自己负责。如果使用了未经初始化的变量,编译器会提醒用户。这样做的好处是:用户可以摆脱因使用未初始化变量得到一个可笑结果的错误。<br> 边界检查。当数组实际上只有,z一1个元素时,不可能访问到它“额外”的数组元素,z,这使重写未经分配的内存成为不可能。<br> 算术运算溢出检查。C#允许在应用级或语句级检查这类操作中的溢出,当溢出发生时会出现一个异常。<br> c#中传递的引用参数是类型安全的。<br> (5)版本处理技术<br> 在过去的几年中,几乎所有的程序员都和所谓的“DLL地狱”打过交道,产生这个问题是因为许多计算机上安装了同一DLL的不同版本。DLL是Dynamic Link Librarv的缩写,是一种编译为二进制机器代码的函数库。DLL在调用程序运行时才被调入内存执行,而不是在编译时链接到可执行程序内部的,这样可以使程序代码在二进制级别实现共享,而不必在每个应用程序中编译一个副本。<br> ……
展开