由于本人有很好的C++基础,所以想从C++直接转到C#.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

1.       布尔值:在C++中,bool类型实质上是一个整数。在C#中,不存在bool类型与其他类型之间的相互转换。

bool 关键字是System.Boolean的别名.它用于声明变量来存储布尔值true和false.

可将布尔值赋给bool变量.也可以将计算为bool类型的表达式赋给bool变量.

在C++中,bool类型的值可转换为int类型的值;也就是说,false等效于零值,而true等效于非零值.在C#中,不存在bool类型与其它类型之间的相互转换.例如,下列if语句在C#中是非法的,而在C++中则是合法的:

int x = 123;

if (x) // 在C# 是错误的

{ printf("The value of x is nonzero."); }

若要测试int类型的变量,必须将该变量与一个值(比如零)进行显式比较,如下所示:

int x = 123;

if (x != 0) // 在C# 中容许

{ printf(“The value of x is nonzero.”); }

2.       long类型:long类型在C#中为64位,而在C++中为32位。

long关键字表示一种整形,该类型根据下表显示的大小和范围存储值。

long取值范围-9223372036854775808到9223372036854775807,在long类型中使用后缀L:

long long2 = <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />4294967296L;

当使用后缀L时,将根据整数的大小确定它的类型为long还是ulong。

3.       switch语句:与C++中的switch语句不同,C#不支持从一个case标签贯穿到另一个case标签。

switch语句是一个控制语句,它通过将控制传递给其体内的一个case语句来处理多个选择和枚举。

空case标签可以从一个case标签贯穿到另一个:

using System;

class SwitchTest

{

static void Main()

{

int n = 2;

switch(n)

{

case 1:

case 2:
                      case 3:

Console.WriteLine(“It`s 1, 2, or 3.”);
                             break;

default:

Console.WriteLine(“Not sure what it is.”);

break;

}

}

}

OUT: It`s 1, 2, or 3.

4.       委托:C#中的委托大致类似于C++中的函数指针,是类型安全可靠的.

委托类型声明的格式如下:

public delegate void TestDelegate(string message);

delegate关键用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法.委托类似于C++中的函数指针;但是,委托是类型安全和可靠的.

5.       extern关键字:在C++中,extern用于导入类型。在C#中,extern用于为使用同一程序集的不同版本创建别名。

extern修饰符用于声明在外部实现的方法。extern修饰符的觉用法是在使用Interop服务调入非托管代码DllImport属性一起使用;在这种情况下,该方法还必须声明为static,如下面的所示:

[DllImport(“avifil32.dll”)]

private static extern void AVIFileInit();

将abstract和extern修饰符一起使用来修改同一成员是错误的。使用extern修饰符意味着方法在C#代码的外部实现,而使用abstract外包符意思着在类在未提供方法实现。

6.       static关键字:在C++中,static既可用于声明类级实体,也可用于声明特定于某模块的类型。在C#中,static仅用于声明类级实体。

使用static修饰符声明属于类型本身而不是属于特定对象的静态成员。static修饰符可用于类、字段、方法属性、运算符、事件和构造函数,但不能用于索引器、析构函数或类以外的类型。

备注:

l          常数或者类型声明隐式地静态成员。

l          不能通过实例引用静态成员。然而,可以通过类型名称引用它。

l          尽管类的实例包含该类所有实例字段的单独副本,但每个静态字段只有一个副本。

l          不可以使用this来引用静态方法或属性访问器。

l          如果对类应用static关键字,则该类的所有成员都必须是静态的。

l          类(包括静态类)可以有静态构造函数。在程序开始和实例化类之间的某个时刻调用静态构造函数。

7.       C#中的Main方法和C++中的main函数的声明方式不同。在C#中,它是大写的,并且始终是static的。此外,在C#中,对处理命令行参数的支持要可靠得多。

Main方法是程序的入口点,您将在那里创建对象和调用其他方法。一个C#程序中只能有一个入口点。

class TestClass

{

static void Main(string[] args)

{

// Display the number of command line arguments:

System.Console.WriteLine(args.Length);

}

}

概述:

l          Main方法是程序的入口点,程序控制在该方法中开始和结束。

l          该方法在类或结构的内部声明。它必须为静态方法,而不应该为公共方法。

l          它可以具有void或int返回类型。

l          声明Main方法时既可以使用参数,也可以不使用参数。

l          参数可以作为从零开始索引的命令行参数来读取。

l          与C和C++不同,程序的名称不会被当作第一个命令参数。

8.       在C#中,只有在unsafe模式下才允许使用指针。

unsafe关键字表示不安全上下文,该上下文是任何涉及指针的操作所必需的。
可以在类型或成员的声明中使用unsafe修饰符。因此,类型或成员的整个正文范围均被视为不安全上下文。若要编译不安全代码,必须指定/unsafe编译器选项。无法通过公共语言运行库验证不安全代码。

9.       foreach关键字使您可以循环访问数组和集合。

foreach语句为数组或对象集合中的每个元素重复一个嵌入语句级。foreach语句用于循环访问集合以获取所需信息,但不应用于更改集合内容以避免产生不可预知的副作用。

备注:

嵌入语句为数组或集合中的每个元素继续执行。当为集合中的所有元素完成有迭代后,控制传递给foreach块之后的下一个语句。

在此示例中,使用foreach显示整数数组的内容。

// cs_foreach.cs

class ForEachTest

{

static void Main(string[] args)

{

int[] fibarray = new int[] {0, 1, 2, 3, 5, 6, 18};

foreach(int i in fibarray)

{

System.Console.WriteLine(i);

}

}

}

输出

0 1 2 3 5 6 18

10.    方法隐藏:C++通过继承支持方法的隐式“隐藏”。在C#中,必须使用new修饰符来显式隐藏继承的成员。

在C#中,new关键字可用作运算符、修饰符或约束。

l          new运算符:用于创建对象和调用构造函数。

new运算符还用于调用值类型的默认构造函数。

不能重载new运算符。如果new运算符分配内在失败,将引发异常OutOfMemoryException。

l          new修饰符:用于向基类成员隐藏继承成员。

在用作修饰符时,new关键字可以显式隐藏从基类继承的成员。隐藏继承的成员意味着该成员的派生版本将替换基类版本。在不使用new修饰符的情况下隐藏成员是允许的,但会生成警告。使用new显式隐藏成员会取消此警告,并记录代之派生版本这一事实。

若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用new修饰符该成员。例如:

public class BaseC

{

public int x;

public void invoke(){}

}

public class DerivedC : BaseC

{

new public void Invoke(){}

}

在此示例中,DerivedC.Invoke隐藏了BaseC.Invoke。字段x不受影响,因为它没有被类似的名称的字段隐藏。

通过继承隐藏名称采用下列形式之一:

1.       引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。

2.       引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。

3.       引入类或结构的方法隐藏基类中具有相同名称的属性、字段和类型。同时也隐藏具有相同签名的所有基类方法。

对同一成员同时使用new和override是错误的,因为这两个修饰符在含义上相互排斥。使用new会用同样的名称创建一个新成员并使原始成员变为隐藏的,而override则扩展继承成员的实现。

l          new约束:用于在泛型声明中约束可能用作类型参数的参数的类型。

new结束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。当泛型创建类型的新实例时,将此约束应用于类型参数,如下面的示例所示:

class ItemFactory<T> where T: new()

{

public T GetNewItem()

{

return new T();

}

}

当与其他约束一起使用时,new()约束必须最后指定:

using System;

public class ItemFactory<T>

where T: IComparable, new()

{}

转载于:https://www.cnblogs.com/flying_bat/archive/2007/05/27/761696.html

C#学习笔记(C#与C++的差异)001相关推荐

  1. HTML5学习笔记 —— JavaScript基础知识

    HTML5学习笔记 -- JavaScript基础知识 标签: html5javascriptweb前端 2017-05-11 21:51 883人阅读 评论(0) 收藏 举报 分类: JavaScr ...

  2. SVO学习笔记(一)

    SVO学习笔记(一) 这篇文章 Frame Featuredetection Featrue_matcher 三角测量求深度 特征匹配 非线性优化寻找匹配特征 极线搜索匹配特征 总结 这篇文章  一个 ...

  3. 7 种 Javascript 常用设计模式学习笔记

    7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...

  4. 142页ICML会议强化学习笔记整理,值得细读

    作者 | David Abel 编辑 | DeepRL 来源 | 深度强化学习实验室(ID: Deep-RL) ICML 是 International Conference on Machine L ...

  5. miniui文件上传 linux,MINIUI grid学习笔记

    grid 控件 a.事件的绑定和移除 grid.on("rowclick", fn); //绑定事件 (这个的话类似jquery的绑定事件) grid.un("rowcl ...

  6. 影像组学视频学习笔记(43)-标准差、标准误及95%置信区间CI、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/f09d0f97592f 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(43)主要 ...

  7. 影像组学视频学习笔记(42)-影像组学特征提取问题解决过程复现、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/c3e6de2f79b3 来源:简书,已获转载授权 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(42)主要 ...

  8. 影像组学视频学习笔记(41)-如何使用软件提取组学特征、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/72186eb3e395 来源:简书,已获授权转载 本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(41)主要 ...

  9. 影像组学视频学习笔记(37)-机器学习模型判断脑卒中发病时间(文献报告)、Li‘s have a solution and plan.

    作者:北欧森林 链接:https://www.jianshu.com/p/3e7a2c84288e 来源:简书,已获授权转载 RadiomicsWorld.com "影像组学世界" ...

最新文章

  1. eclipse创建python项目提示Project interpreter not specified
  2. CSS笔记(十)position属性与定位
  3. luogu P5324 [BJOI2019]删数
  4. 【MyBatis使用】mapper.xml 调试时无法打印SQL的无奈解决方法分享(原因说明+举例)
  5. SignalR ——Android实践
  6. 设计模式工作笔记-UML和设计模式导论
  7. matlab有限差分一维导热,一维导热方程 有限差分法 matlab实现
  8. android 查找所有的串口,Android 串口通讯 获取卡号
  9. ubuntu16.04 安装python3.6
  10. [纯技术讨论]从12306谈海量事务高速处理系统
  11. linux查看进程占用内存与ps命令
  12. pythonfor杨辉三角,python实现杨辉三角 python实现杨辉三角的几种方法代码实例
  13. 目标检测 | 火焰烟雾检测论文(实验部分)
  14. kettle抽取数据
  15. 【网站搭建】阿里云搭建个人网站详细流程
  16. GB/T28181视频国标平台级联给上级自定义级联的国标设备编号解决不同设备重复的通道编号问题
  17. HTML CSS 布局
  18. [工具设置]使用NSIS制作安装包
  19. 苹果手机 不要删除服务器邮件,iCloud邮件无法删除怎么办?解决iCloud邮件占用空间方法...
  20. MVC实现SQL多表查询并导出表格

热门文章

  1. 一些计算机知识的总结(转)
  2. 《企业自主搞定ERP》试读:第一章-Odoo概述
  3. Core Animation放大缩小;CAKeyframeAnimation
  4. sublime提示There are no packages available for installation解决办法
  5. etrace 跟踪程序函数动态执行流程
  6. linux0.11学习笔记-技术铺垫-简单AB任务切换程序(3)-调试手段和方法
  7. 【原创】CSSOO的思想及CSS框架的应用(未整理完)
  8. SQL Server常用的系统存储过程应用实例
  9. python 二维数组赋值_python日常注意小知识集锦
  10. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 @Mixin 注解进行方法注入 | Mixin 混合多个类优先级分析 )