C# 是三大主流OOP(面向对象编程)语言(Java, C++,C#)之一,是最新的一种,必然借鉴了其他两者的长处。三者有太多的共性精一而通其三。
OOP:Object Oriented Programming
1. 不能直接操作内存
C#是运行在虚拟机中的元指令。出于安全性考虑,没有指针,不能直接操作内存,自动实现内存管理。 C#中实现自动垃圾回收,通过new在堆中创建对象,当对该对象的引用计数为0时回收内存。类有构造函数而没有析构函数。
- C#没有指针概念,只有引用和数值之分。
- int等内部数据类型和struct定义的类型是数据类型,拷贝时做深度拷贝
- string和用class定义的类型是引用类型,拷贝时做浅拷贝
深拷贝和浅拷贝:深拷贝新建内存地址,改变原值时新值不改变;浅拷贝共用内存地址,是引用。
C#为弥补没有指针,相比之下就需要引进很多新的机制。比如C#的参数传递分为传值和传址,传址时需要加ref或者out关键字。
2. 彻底地面向对象编程
C#的OO(Object Oriented)特性更为彻底,不存在独立的函数。程序的入口Main()函数是某个对象的public static 成员函数。
C#的所有对象都是由Object派生而来,包括内部数据类型int, float, string等。C#中不存在模板,通过将参数设置为Object类型来实现类似的功能。
C#没有头文件,变量、函数和类没有定义和声明的区别。都在一起。只能通过设计抽象类的方式实现代码分离。
C#中在类中的成员变量声明处即可初始化,而C++不行。C#中的静态成员变量可以在静态构造函数中初始化,而静态构造函数是在该类的第一次使用时调用。
3. foreach语句
C#的语法中多了foreach(typevinlist)statement 语句;而C++则需要使用标准库的函数
C#与C++相比较,更加复杂和杂乱。