C++2C#上手DJ版(1)

1.基本语法

1.1变量和表达式

基本类型:

整形:

有符号

无符号

sbyte

byte

short

ushort

int

uint

long

ulong

浮点型

类型

备注

m取值范围 e取值范围

近似值

float

 

0 <224 span -149 <104<>

1.5 X 10-45 到 3.4 X 1038

double

 

0 <253 span -1075 <970<>

5.0 X 10-324 到 1.7 X 10308

decimal

小数型

0 <296 span -26 <0<>

1.0 X 10-28 到 7.9 X 1028

前两者可用+/- m x 2e的形式存储,decimal则是用+/- m x 10e存储

另外三种简单类型

类型

允许的值

char

一个Unicode字符,用16位整形编码

bool

真假

string

一组字符

1.2命名空间

namespace LevelOne

{

    int a;

    namespace LevelTwo

    {

        //类似这样定义命名空间,C#中的所有代码一般都包含在命名空间中,包括Main函数(C#的Main首字母大写的哦,和C++不同)

}

}

namespace LevelOne2

{

    //可以用"."运算符来调用其他命名空间中的东西

    LevelOne.a=1;

    //也可以用using语句,

    using LevelOne;

    a=1;

}

 

1.3运算符

运算符优先级

运 算 符

初级运算符

() . [] x++ x-- new typeof sizeof checked unchecked

一元运算符

+ – ! ~ ++x --x和数据类型转换

乘/除运算符

* / %

加/减运算符

+ –

移位运算符

<< >>

关系运算符

< > <= >= is as

比较运算符

= = !=

按位AND运算符

&

按位XOR运算符

|

按位OR运算符

^

布尔 AND运算符

&&

布尔OR运算符

||

三元运算符

?:

赋值运算符

= += –= *= /= %= &= |= ^= <<= >>= >>>=

 

从上表可以看到所有C#的运算符,大部分与C++相同,这里介绍几个不同的

checked和unchecked运算符

C#提供了checked和 unchecked运算符。如果把一个代码块标记为checked,CLR就会执行溢出检查,如果发生溢出,就抛出异常。如果改变代码,使之包含checked运算符:

byte b = 255;

checked

{

   b++;

}

Console.WriteLine(b.ToString());

运行这段代码,就会得到一个错误信息:

Unhandled Exception: System.OverflowException: Arithmetic operation resulted in an overflow.

   at Wrox.ProCSharp.Basics.OverflowTest.Main(String[] args)

如果要禁止溢出检查,可以把代码标记为unchecked:

byte b = 255;

unchecked

{

   b++;

}

Console.WriteLine(b.ToString());

注意,unchecked是默认值。只有在需要把几个未检查的代码行放在一个明确标记为checked的大代码块中,才需要显式使用unchecked关键字。

is运算符

is运算符可以检查对象是否与特定的类型兼容。例如,要检查变量是否与object类型兼容:

注意:

"兼容"表示对象是该类型,或者派生于该类型。

int i = 10;

if (i is object)

{

   Console.WriteLine("i is an object");

}

int和从object继承而来的其他C#数据类型一样,表达式i is object将得到true,并显示信息。

as运算符

as运算符用于执行引用类型的显式类型转换。如果要转换的类型与指定的类型兼容,转换就会成功进行;如果类型不兼容,as运算符就会返回值null。如下面的代码所示,如果object引用不指向string实例,把object引用转换为string就会返回null:

object o1 = "Some String";

object o2 = 5;

string s1 = o1 as string;      //s1 = "Some String"

string s2 = o2 as string;     //s1 = null

as运算符允许在一步中进行安全的类型转换,不需要先使用is运算符测试类型,再执行转换。

sizeof运算符

使用sizeof运算符可以确定堆栈中值类型需要的长度(单位是字节):

unsafe

{

   Console.WriteLine(sizeof(int));

}

其结果是显示数字4,因为int有4个字节。

注意,只能在不安全的代码中使用sizeof运算符。第7章将详细论述不安全的代码。

typeof运算符

typeof运算符返回一个表示特定类型的System.Type对象。例如,typeof(string)返回表示System.String类型的Type对象。

可空类型运算符

如果在程序中使用可空类型,就必须考虑null值在与各种运算符一起使用时的影响。通常可空类型与一元或二元运算符一起使用时,如果其中一个操作数或两个操作数都是null,其结果就是null。例如:

int? a = null;

int? b = a + 4;      // b = null

int? c = a * 5;      // c = null

但是在比较可空类型时,只要有一个操作数是null,比较的结果就是false。即不能因为一个条件是false,就认为该条件的对立面是true,这在使用非可空类型的程序中很常见。例如:

int? a = null;

int? b = -5;

if (a >= b)

   System.Console.WriteLine("a >= b");

else

   System.Console.WriteLine("a < b");

空接合运算符

空 接合运算符(??)为处理可空类型引用类型时表示Null值的可能性提供了一种快捷方式。这个运算符放在两个操作数之间,第一个操作数必须是一个可空类 型或引用类型,第二个操作数必须与第一个操作数的类型相同,或者可以隐含地转换为第一个操作数的类型。空接合运算符的计算如下:如果第一个操作数不是 null,则整个表达式就等于第一个操作数的值。但如果第一个操作数是null,则整个表达式就等于第二个操作数的值。例如:

int? a = null;

int b;

b = a ?? 10;     // b has the value 10

a = 3;

b = a ?? 10;     // b has the value 3

如果第二个操作数不能隐含地转换为第一个操作数的类型,就生成一个编译错误

详细查询运算符可登陆http://msdn2.microsoft.com/zh-cn/library/6a71f45d(VS.80).aspx

查询

1.5数组、结构和枚举

数组

定义格式:

int[] 数组名

数组要在访问之前初始化。

例如:

int[] Array={1,3};

或者

int[] Array=new int[2];

或者

int[] Array;

Array=new int[2];

结构体:和C++一样

枚举 :和C++一样

enum typeName{value1,value2,value3}

1.5选择及循环语句

选择语句:if else和switch

int caseSwitch = 1;

switch (caseSwitch)

{

case 1:

Console.WriteLine("Case 1");

break;

case 2:

Console.WriteLine("Case 2");

break;

default:

Console.WriteLine("Default case");

break;

}

http://msdn2.microsoft.com/zh-cn/library/06tc147t(VS.80).aspx

 

循环语句:for, while, do…while和 foreach

 

前三个和C++一样,就不讲了,下面介绍下foreach,可以用于从集合中逐一选取元素进行循环

class ForEachTest

{

static void Main(string[] args)

{

int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 };

foreach (int i in fibarray)

{//用in关键字加在集合前

System.Console.WriteLine(i);

}

}

}

集合可以是数组,枚举型等等~

 

2.函数

函数的定义和使用基本上和C++相同,其重载方式在讲到的时候再说。

注意的是参数中,C++的&符号代表引用而在C#

2.1委托

委托是一种引用方法的类型。一旦为委托分配了方法,委托将与该方法具有完全相同的行为。委托方法的调用可以像其他任何方法一样,具有参数和返回值,如下面的示例所示:

public delegate int PerformCalculation(int x, int y);

delegate是定义委托的关键字

  • 委托类似于 C++ 函数指针,但它们是类型安全的。

 

  • 委托允许将方法作为参数进行传递。

 

  • 委托可用于定义回调方法。

 

  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。

using System;

// 声明一个委托:

delegate void SampleDelegate(string message);

 

class MainClass

{

// 一个普通的函数:

static void SampleDelegateMethod(string message)

{

Console.Write(message);

}

 

static void Main()

{

// 建立一个委托实例d1并将函数SampleDelegateMethod赋值给它:

SampleDelegate d1 = SampleDelegateMethod;

// 运行委托 d1:

d1("Hello");

}

}

可以把它理解成函数指针那样~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值