`
dongwenhua
  • 浏览: 3218 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

从C/C++到C#之一

    博客分类:
  • C#
阅读更多
C#和C/C++语法很相似,所以从C/C++过渡到C#是很容易,先让我们看看第一个程序,看看是不是长得很像:
一、第一个程序
using System;
namespace Wrox.ProCSharp.Basics
{
class MyFirstCSharpClass
{
static void Main()
{
Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();
return;
}
}
}

名字空间:using System;和namespace Wrox.ProCSharp.Basics被称为名字空间的东东,这个东东和C++完全一样,是一个组织和管理程序的一种方式,可以防止命名冲突重复。C是没有名字空间这个概念的,所以你如果去#include两个库,而这两个库包含了相同签名的函数fun(),那么你调用fun()的时候就会有名字冲突,造成编译错误。而在C++/C#中用ANamespace::fun()就会调用ANamespace下的fun,从而避免上述问题,名字空间这个东东在后来的语言中几乎都提供基础设施,它提供了一种更好的组织程序和避免名字冲突的方法。通过不同按功能或层次组织名字空间,使程序具有模块化。
using System;声明了使用System这个名字空间,所以使用里面的东东不需要“System.里面的东东”了:如System.Console.ReadLine();可以简写成Console.ReadLine();而namespace Wrox.ProCSharp.Basics是指当前的程序的名字空间是Wrox.ProCSharp.Basics,其他地方使用这里面东东需要using Wrox.ProCSharp.Basics,或者每个使用它里面东东的地方都加上Wrox.ProCSharp.Basics::前缀。通常使用aa.bb.cc用冒号分开的东东来代表名字空间,便于层次化组织程序。名字空间可以起别名,这样可以少敲几个字母:using Introduction = Wrox.ProCSharp.Basics;这样可以直接使用Introduction作为Wrox.ProCSharp.Basics;的简写。

在C#是纯面向对象的,所以一切的代码都需要写在类中。这点和C++不一样,因为C++是过程化和面向对象的混合体。
一个类想单独执行就需要入口函数Main, Main和C++中的main是一样的,签名方式也是一样的,可有几种书写方式。
static void Main(),static void Main(string[] args) static int Main(),static int Main(string[] args)

一个带命令行参数,一个不带命令行参数的形式,命令行参数可以在运行的时候设置。
返回值是void还是int的问题,在c语言中,其实c99里面已经做了一个标准化,main函数是需要有返回值的,gcc没有返回值报错的。这点不知道C#为什么没做一个标准化。
Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();

是Console类中定义的两个静态的标准输入输出函数,他们分别向控制台输出一行和从控制台读入一行。
二、变量类型:
值类型与引用类型:
在C++中也有类似的概念,引用和值类型的概念,C++使用一个&来作为引用类型。其实C++和C#的引用的概念不是一个东东,虽然在某些方面他们发挥了相似的作用。C++的引用是一个别名,只是给你一个存储单元起了另外一个名字,而C#里面的引用,其实质上和C++的指针行为一样,只是没有了++,--操作而已,不妨称为安全的指针,用它来间接的操作一个对象。而C++的引用还是直接操作那个对象。
在C#中基本类型和Struct是值类型,但是基本类型也有它的包装类型(double对应System.Double),它是引用类型的。一条规则是凡是使用new创造出来的都是引用类型。
三、控制流程:
C#完全沿用了C/C++的流程控制语法,另外增加了一个更容易使用的foreach来遍历集合中的元素:
foreach(int temp in aIntArray){Concole.WriteLine(temp)}

四、数组类型:
	int[] integerArray;

这个东东还是和C/C++不同的,在C#中这个语句并没有创建一个数组,他只是一个声明,要想真正使用这个数组需要
  int[] integerArray = new int[20];

这里的数组是一个引用类型的例子,其实integerArray只是一个数组的引用,通过它来操作数组,所以
int[] copy = integerArray;

并不会拷贝所有的元素到copy中,我们提到过引用其行为和C++的指针类似,所以它integerArray和copy都指向同一个存贮了20个整数的存储单元的开始位置。
五、输入输出格式化:
C#使用了一种和c类似的格式化输出的方式,例如:
int i = 10;int j = 20;
C: printf(“%d plus %d equals %d”, i , j , i + j);
C#: Console.WriteLine(“{0} plus {1} equals{2}”, i, j, i + j);

也就是用后边的变量带入{}中,而{}里的数字代表后边了参数的位置。


分享到:
评论

相关推荐

    C/C++和C#混合编程

    因此,如何实现C/C++与C#之间的混合编程,成为了开发者关注的焦点之一。 #### 技术背景 C#和C++在编译过程中的区别主要体现在它们的目标代码上:C#编译成微软中间语言(MSIL),而C++通常直接编译成本地机器码。...

    C/C++程序四书五经

    C语言不仅为后续的面向对象语言如C++、Java和C#等奠定了基础,而且在系统编程、嵌入式编程等领域持续发挥着核心作用。C语言的诞生标志着现代程序语言革命的开端,其简洁高效、强大的表达力、跨平台的移植性,使其...

    VB C/C++ C#中自定义数据结构源码

    此外,考虑跨平台兼容性和团队熟悉的技术栈也是决定因素之一。 总的来说,VB、C/C++以及C#都提供了丰富的工具来创建自定义数据结构,理解它们之间的差异和优劣,有助于我们在开发过程中做出明智的选择,以实现高效...

    C++/CLI for C# Developers

    本书《Pro Visual C++2005 for C# Developers: Featuring C++/CLI》由 Dean C. Wills 编写,并得到了微软 Visual C++ 团队成员 Jason Shirk 的推荐序言。 #### 二、C++/CLI 与 Managed C++ 的区别 ##### 2.1 ...

    vs2008/C++/vb+c# 串口通信编程

    - 对于“计算机到计算机”的连接,需要一条零调制解调器电缆。 - 对于“单计算机”测试,可以使用USB转串口适配器。 2. **软件实现:** - 在.NET Framework中利用SerialPort类的属性和方法,如`SerialPort.Port...

    JAVA调用C++/C#的DLL

    在IT行业中,跨语言通信是一项常见的需求,尤其是在Java与C++或C#之间。标题"JAVA调用C++/C#的DLL"涉及到的技术点主要集中在Java ...无论是为了利用现有C++/C#库,还是优化性能,熟悉JNI都是Java开发者必备的技能之一。

    C/C++应用程序路线图(pdf)

    Visual C++ 2005引入了一个新的C++到.NET的绑定,即C++/CLI扩展,这些扩展正由ECMA标准化,并最终提交给ISO。C++/CLI扩展包括了一些当前C++标准中未包含的关键字,但不会影响符合标准的C++程序,因为它们遵循了ISOC+...

    FTP_SERVER.zip_FTP SERVER_c# ftp_c/c++ ftp_ftp_ftp c++

    FTP协议是互联网上最早期的协议之一,允许用户在两台计算机之间进行文件的上传和下载。它基于TCP/IP,定义了客户端和服务器之间的交互过程。FTP服务器负责响应客户端请求,管理文件存储,并执行文件操作。FTP服务器...

    c++ 转换 java c# 转换 java c++ 转换 c#

    `CPlus_To_CShap_Converter.zip`可能是一个专门处理这种转换的工具,它能帮助开发者把C++代码集成到.NET环境中。 在进行这些转换时,需要考虑的因素包括代码的可读性、性能、兼容性以及可能的API调整。转换器可能会...

    C++调用C#实现Xml读写

    这一过程涉及到C++和C#之间的接口交互,以及类型转换等关键技术。 首先,C++与C#虽然都属于.NET框架下的语言,但它们之间存在语法和类型的差异。C++更倾向于面向过程编程,而C#是面向对象的语言,因此在接口设计时...

    C++与C#的简单比较

    而C#(C Sharp)是微软开发的一种面向对象的、现代的、类型安全的编程语言,主要用于.NET Framework。 C++的复杂性是众所周知的,尤其是对于初学者。学习C++通常需要深入理解《C++ Primer》和《C++标准程序库》等...

    C#Socket高并发,socket高并发解决方案,C/C++

    在IT行业中,网络编程是构建分布式系统的关键技术之一,而Socket是实现网络通信的基本接口。本文将深入探讨如何使用C#语言以及Socket来构建高并发的系统,同时也会涉及C++的相关概念,因为某些底层优化可能需要借助...

    C#调用C++动态库,执行回调函数并传递结构体参数

    在IT领域,跨语言通信是常见的需求之一,尤其是在C#和C++的混合编程中。本文将详细探讨如何在C#中调用C++编写的动态链接库(DLL),执行回调函数并传递结构体参数。这涉及到.NET Framework的P/Invoke(Platform ...

    我们该使用何种编程语言?是C、C++、VB、Java还是C#?

    C、C++、VB(Visual Basic)、Java和C#都是广泛应用的编程语言,每种都有其独特的优势和适用场景。 C语言是基础且强大的低级编程语言,它的语法简洁,对内存管理有直接控制,因此在系统编程、嵌入式开发和游戏引擎...

    C#调用C++结构体开发

    在IT行业中,跨语言通信是常见的需求之一,特别是在Windows平台上,C#和C++的混合编程经常被用于利用C++的高性能和C#的高级特性。本教程将深入讲解如何在C#中调用C++编写的结构体,实现两者的有效结合。 首先,我们...

    c#调用C++DLL实例

    在IT领域,跨语言通信是常见的需求之一,特别是在.NET框架中的C#与原生代码如C++之间。本文将深入探讨如何使用C#调用C++编写的动态链接库(DLL)实例,以实现两者之间的无缝协作。我们将通过具体的VS2008项目实例来...

Global site tag (gtag.js) - Google Analytics