相对于C和C++,这个语言在许多方面进行了限制和增强:
1指针(Pointer)只能用于不安全模式之中。大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型,以及受垃圾收集控制的托管对象。
2对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。
3只允许单一继承(singleinheritance),但是一个类可以实现多个接口(interfaces)。
4C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而接口布尔型同整型,及枚举型同整型不允许隐含转换,非空指针(通过引用相似对象)同用户定义类型的隐含转换字段被显式的确定,不同于C++的复制构造函数。
5数组声明语法不同("int[]a=newint[5]"而不是"inta[5]")。
6枚举位于其所在的名字空间中。
7C#中没有模版(Template),但是在C#2.0中引入了泛型(Genericprogramming),并且支持一些C++模版不支持的特性。比如泛型参数中的类型约束。另一方面,表达式不能像C++模版中被用于类型参数。
8属性支持,使用类似访问成员的方式调用。
9完整的反射支持。