C#与C++的区别总结

没有高级语法部分,只有基础语法和OOP。C#确实是优秀的语言,海神也让人敬仰。

基础语法

  • 两种布尔逻辑运算符。侃:有意思
  • 字符串格式化打印。侃:好,这才是给人用的API
  • 数组:声明 C# 数组和声明 C++ 数组的语法不同。在 C# 中,“[]”标记出现在数组类型的后面。侃:C#的数组不错,更直观,里面也有更多的语法糖。
  • bool 类型:bool 类型和其他类型(特别是 int)之间没有转换。侃:好
  • struct 类型:在 C# 中,类和结构在语义上不同。struct 是值类型,而 class 是引用类型。侃:很好,值类型和引用类型都很有用,要不然C++也不会折腾什么POD。
  • switch 语句:与 C++ 中的 switch 语句不同,C# 不支持从一个 case 标签贯穿到另一个 case 标签。侃:很好,switch贯穿写法绝大部分都是漏写了break
  • delegate 类型:委托与 C++ 中的函数指针基本相似,但前者具有类型安全,是安全的。侃:极好,C#最大卖点之一,委托非常优雅的定义了回调,相比而言C++里各种函数指针类型定义简直要吐
  • 预处理器指令用于条件编译。C# 中不使用头文件。侃:很好,另外鄙视C++拿头文件当文档的
  • 异常处理:使用 finally 语句。侃:好
  • 非转义字符串。侃:极好,这才是给人读的字符串
  • C# 运算符:C# 支持其他运算符,如 is 和 typeof。它还引入了某些逻辑运算符的不同功能。侃:好
  • Main 方法和 C++ 中的 main 函数的声明方式不同。另外,比较每种语言的命令行参数的使用。侃:好,终于不用为老谭吵架了
  • 方法参数:C# 支持 ref 和 out 参数,这两个参数取代指针通过引用传递参数。侃:极好,显式调用,这比C++高的不知道哪里去了
  • 在 C# 中只在不安全模式下才使用指针。侃:好,当年Java因为没指针推销被一通喷,只好假装有指针。这有利于推销。
  • C# 中的局部变量在初始化前不能使用。侃:好
  • ///文档注释。侃:好
  • 函数支持参数数组。侃:好,比写printf舒服多了

OOP

  • C# 中没有全局方法和全局变量:方法和变量必须包含在类型声明(如 class 或 struct)中。侃:习惯就好,全局方法有时候是很丑陋的,比如一个getxxx,你到底是从哪get的。
  • 继承:类只能继承一个基类中的实现。另外,类或接口可以实现多个接口。侃:单根继承很好。
  • 类成员有字段和属性之分。侃:好,懒人和勤快人都能用
  • 属性访问语法和自动属性。侃:好,比手写getter,setter好多了
  • 使用 new 修饰符显式隐藏继承成员。侃:很好
  • 部分类定义。侃:好,谁再规定Java一个类不能超过多少行,可以怼了。
  • 只读字段。侃:好
  • 静态构造函数。侃:好,终于不用分开写了。

参考:

https://msdn.microsoft.com/zh-cn/library/aa287549(v=vs.71).aspx

时间: 2024-10-14 15:15:22

C#与C++的区别总结的相关文章

Nginx 反代参数:$X-Real-Ip和$X-Forwarded-For的区别

## \$X-Real-Ip和$X-Forwarded-For的区别 标签(空格分隔): nignx 负载均衡 client-ip --- ####1.如果只有一层代理,这两个头的值就是一样的####2.多层代理> * X-Forwarded-For:  header包含这样一行        `*X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3*`> * X-Real-Ip:没有相关标准,上面的例子,如果配置了X-Read-IP,可能会有两种情况`// 最

C#中Convert和parse的区别

Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理方法: Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常. 没搞清楚Convert.ToInt32和int.Parse()的细细微区别时千万别乱用,否则可能会产生无法预料的结果,举例来说:假如从url中取一个参数page的值,我们知道这个值是一个int,所以即可以用Convert.ToInt32(Request.Que

python判断字符串,str函数isdigit、isdecimal、isnumeric的区别

s为字符串s.isalnum() 所有字符都是数字或者字母s.isalpha() 所有字符都是字母s.isdigit() 所有字符都是数字s.islower() 所有字符都是小写s.isupper() 所有字符都是大写s.istitle() 所有单词都是首字母大写,像标题s.isspace() 所有字符都是空白字符.\t.\n.\r 判断是整数还是浮点数a=123b=123.123 >>>isinstance(a,int)True>>>isinstance(b,floa

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

mysql中int、bigint、smallint和tinyint的区别与长度

对比发现 int bigint smallint 和 tinyint 类型,如果创建新表时没有指定 int(M) 中的M时,默认分别是 : int             -------     int(11) bigint       -------     bigint(20) smallint   -------     smallint(6) tinyint     -------     tinyint(4) 下面是这几种类型的取值范围 参考:http://www.2cto.com/d

call和apply和bind的区别

在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. JavaScript 的一大特点是,函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」. apply(): 将函数作为指定对象的方法来调用,传递给它的是指定的参数数组function.apply(thisobj, args) 或者 function.apply(thisobj, args) 1.thisobj

mybatis中"#"和"$"的区别

mybatis中"#"和"$"的区别 动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析.mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}. 在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别: select * from user where name = #{name}; select * from

mybatis与hibernate的区别

本文转载自:http://blog.csdn.net/wangpeng047/article/details/17038659 以前没怎么用过mybatis,只知道与hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与hibernate区别是非常大的,结合至今为止的经验,总结出以下几点: 1. hibernate是全自动,而mybatis是半自动. hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调

while与do while 区别 for循环的简介及break和continue的区别

do while 循环和while循环的区别   1.do while循环是先执行循环体,然后判断循环条件,如果为真,则执行下一步循环,否则终止循环:    while循环是先判断循环条件,如果条件为真则执行循环体:   2.do while循环条件后面必须有一个分号,这个分号表明循环结束. 1.for循环 for循环是更加简洁的循环语句,大部分情况下,for循环可以代替while循环.do-while循环. for循环的格式为: for( 初始语句  ; 执行条件  ; 增量 ) { 循环体