对于这三种语言我始终是个初学者,翻到旧时笔记便转到Blog,敲得手酸,欢迎拍砖!
本文从以下几个方面考察三者之异同:
一、C#程序基本框架
命名空间
{
类
{
main()方法:public static void main()
{ ... }
static int main()
{ ...
return 0 ; }
static int main(string[] args)
{ ...
return 0 ; }
}
}
1、参数为string 数组,与c/c++不同,该数组不包含可执行(.exe)文件名。
2、与c/c++同对大小写敏感。
3、c#使用Unicode编码。
二、变量与常量
1、与c++同,可使用new 操作符,调用c#数值类型的默认构造函数并对变量赋以默认值。
2、c#不允许使用未被初始化的变量,而对于c/c++将赋之予机器随机数。
3、c#作用域规则与c/c++不同之处:在嵌套的内部作用域定义的变量不能和外部作用域中定义的变量重名。
4、c/c++中可使用#define定义常量,而c#中需按const方法定义。
三、数值类型
1、c/c++中数值溢出不报错,如65535+1将变成-1或0,而c#中不允许,其须做边界检查。
2、c/c++中整型常量还有一种以“o”开头的八进制数,而c#中只支持十进制和十六进制。
3、c/c++中int/long类型占用的存储空间大小将依赖于具体的运行平台,如16位处理器下int型占用2字节,而Intel pentium处理器下取决于具体的操作系统。c#中int类型占4字节,与机器字长无关。
4、c/c++中定义为char类型的变量实质上为一整型变量,其取值范围为-128~127(1字节)
char ch=97;
而c#中使用Unicode编码中的字符,char类型占2字节
char ch=(char)97;
5、c/c++中无decimal类型
6、c中无布尔型,c++有布尔型,但仍以c中的“非零值”为值;c#不支持bool型与整型间的转换:
int a=0;
if (a) callfunction(); // in c/c++
if (a!=0) callfunction(); // in c/c++/c#
7、c#中有checked 与 unchecked。
8、c/c++使用字符数组表示字符串而无string类型,c#中只能使用string类型的变量表示字符串。
9、c#不再支持指针,采用无用单元收集程序(GC)自动管理内存,指针可在usafe块中使用。
10、c#使用统一类型系统,如字符就是 char,无须对char、unsigned char、signed char加于区别。
11、c#去掉了全局函数、全局变量/常量,将其封装于一类中,即全局的概念退化为类的静态成员(通过类名访问),进一步减少了命名冲突。
四、运算符与表达式
1、c/c++中的取余运算符“%”,其操作数只能是整型变量或常量,而c#中无限制。
2、c#简化了c++在类、命名空间、方法重载和异常处理等方面操作,如:c++中使用成员时可用“::”、“.”、“->”,而c#只有"."。
五、控制语句
1、c#中控制 if 条件的表达式必须为关系表达式或 bool 类型变量,c/c++中可使用数值参与逻辑判断。
2、c/c++中 switch 语句任何 case 分支后面的语句可不包含 break 等控制程序流程的语句,而c#中不可省 break/goto/return.
3、c#中有foreach-in语句。
4、c#是一组件语言,提供了许多支持组件开发的特性,如:性质(property)、事件(event)、属性(attribute)。
5、c#中代理(delegate)代替c++中函数指针功能。
六、数组
1、c/c++于定义格式中指明了数组的长度,内存分配相应空间;而c#是在使用数组的过程中动态分配数组元素个数控制内存。
2、c#中,如何是的循环结构中定义控制循环次数的变量,则退出循环结构时,该变量将被释放,故不同循环中可同名定义,而c/c++中不允许。
3、c#将数组视为一对象,而非c/c++之字节流。
七、面向对象程序设计思想
1、c#中一般不使用析构方法,有无用空间回收功能。
2、c++中既可通过类名访问静态成员,也可通过实例名访问静态成员,而c#只能通过类名访问静态成员。
3、c#中,方法与其操作对象封装一起构成类,方法是类的成员,c++中称作函数。
4、c#所有代码须位于类的框架之内,于类的外部不可创建方法,而c++允许。
5、c#不允许方法的参数采用默认值,而c++中若调用方法时未给定参数值,该参数可有默认值。
6、c++中可以借助“类名::类名(参数列表)”语句格式于类外定义类之构造函数,c#中构造函数的定义必须包含于类内,与方法成员同。
7、c++中的 this 指针是每个对象隐藏的指针,c#中的 this 为一值类型,表示对实例的引用。
8、c#去掉了多继承,通过利用多个接口隐式实现多继承。
就这么些了!每种语言都有其特性,比较的目的并非强制认亲,只是为了便于对照学习。有不对之处还望各位看官斧正!