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

1.基本語法

1.1變量和表達式

基本類型:

整形:

有符號

無符號

sbyte

byte

short

ushort

int

uint

long

ulong

浮點型

類型

備註

m取值範圍 e取值範圍

近似值

float

 

0

1.5 X 10-45 到 3.4 X 1038

double

 

0

5.0 X 10-324 到 1.7 X 10308

decimal

小數型

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");

}

}

可以把它理解成函數指針那樣~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章