从C/C++到C#之一

C#和C/C++语法很相似,所以从C/C++过渡到C#是很容易,先让我们看看第一个程序,看看是不是长得很像:
一、第一个程序
[code]
using System;
namespace Wrox.ProCSharp.Basics
{
class MyFirstCSharpClass
{
static void Main()
{
Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();
return;
}
}
}
[/code]
名字空间: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是一样的,签名方式也是一样的,可有几种书写方式。
[code]
static void Main(),static void Main(string[] args) static int Main(),static int Main(string[] args)
[/code]
一个带命令行参数,一个不带命令行参数的形式,命令行参数可以在运行的时候设置。
返回值是void还是int的问题,在c语言中,其实c99里面已经做了一个标准化,main函数是需要有返回值的,gcc没有返回值报错的。这点不知道C#为什么没做一个标准化。
[code]
Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();
[/code]
是Console类中定义的两个静态的标准输入输出函数,他们分别向控制台输出一行和从控制台读入一行。
二、变量类型:
值类型与引用类型:
在C++中也有类似的概念,引用和值类型的概念,C++使用一个&来作为引用类型。其实C++和C#的引用的概念不是一个东东,虽然在某些方面他们发挥了相似的作用。C++的引用是一个别名,只是给你一个存储单元起了另外一个名字,而C#里面的引用,其实质上和C++的指针行为一样,只是没有了++,--操作而已,不妨称为安全的指针,用它来间接的操作一个对象。而C++的引用还是直接操作那个对象。
在C#中基本类型和Struct是值类型,但是基本类型也有它的包装类型(double对应System.Double),它是引用类型的。一条规则是凡是使用new创造出来的都是引用类型。
三、控制流程:
C#完全沿用了C/C++的流程控制语法,另外增加了一个更容易使用的foreach来遍历集合中的元素:
[code]
foreach(int temp in aIntArray){Concole.WriteLine(temp)}
[/code]
四、数组类型:
[code]
int[] integerArray;
[/code]
这个东东还是和C/C++不同的,在C#中这个语句并没有创建一个数组,他只是一个声明,要想真正使用这个数组需要
[code]
int[] integerArray = new int[20];
[/code]
这里的数组是一个引用类型的例子,其实integerArray只是一个数组的引用,通过它来操作数组,所以
[code]
int[] copy = integerArray;
[/code]
并不会拷贝所有的元素到copy中,我们提到过引用其行为和C++的指针类似,所以它integerArray和copy都指向同一个存贮了20个整数的存储单元的开始位置。
五、输入输出格式化:
C#使用了一种和c类似的格式化输出的方式,例如:
[code]
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);
[/code]
也就是用后边的变量带入{}中,而{}里的数字代表后边了参数的位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值