C#速成(之三) (轉)

amyz發表於2007-11-25
C#速成(之三) (轉)[@more@]

-------------------

修飾符

-------------------

你必須已經知道public、private、protected這些常在C++當中使用的修飾符。這裡我會討論一些引入的新的修飾符。

:namespace prefix = o ns = "urn:schemas--com::office" />

readonly(只讀)

readonly修飾符僅在類的資料成員中使用。正如這名字所提示的,readonly 資料成員僅能只讀,它們只能在構造或是直接初始化操作下賦值一次。readonly與const資料成員不同,const 要求你在宣告中初始化,這是直接進行的。看下面的示例程式碼:

class MyClass

{

  const int constInt = 100;  //直接初始化

  readonly int myInt = 5;  //直接初始化

  readonly int myInt2;  //譯者注:僅做宣告,未做初始化

 

  public MyClass()

  {

  myInt2 = 8;  //間接的

  }

  public Func()

  {

  myInt = 7;  //操作(譯者注:不得賦值兩次)

  Console.WriteLine(myInt2.ToString());

  }

 

}

sealed(密封)

密封類不允許任何類繼承,它沒有派生類。因此,你可以對你不想被繼承的類使用sealed關鍵字。

sealed class CanNotbeTheParent

{

  int a = 5;

}

unsafe(不)

你可使用unsafe修飾符來定義一個不安全的上下文。在不安全的上下文裡,你能寫些如C++指標這樣的不安全的程式碼。看下面的示例程式碼:

public unsafe MyFunction( int * pInt, double* pDouble)

{

  int* pAnotherInt = new int;

  *pAnotherInt  = 10;

  pInt = pAnotherInt;

  ...

  *pDouble = 8.9;

}

-------------------

interface(介面)

-------------------

如果你有COM方面的概念,你會立亥明白我要談論的內容。一個介面就是一個抽象的基類,這個基類僅僅包含功能描述,而這些功能的實現則由子類來完成。C#中你要用interface關鍵字來定義象介面這樣的類。就是基於這樣的介面上的。C#中你不支援C++所允許的類多繼承(譯者注:即一個派生類可以從兩個或兩個以上的父類中派生)。但是多繼承方式可以透過介面獲得。也就是說你的一個子類可以從多個介面中派生實現。

using System;

interface myDrawing

{

  int originx

  {

  get;

  set;

  }

  int originy

  {

  get;

  set;

  }

  void Draw( shape);

}

class Shape: myDrawing

{

  int OriX;

  int OriY;

  public int originx

  {

  get{

  return OriX;

   }

  set{

  OriX = value;

  }

  }

  public int originy

  {

  get{

  return OriY;

  }

  set{

  OriY = value;

  }

  }

  public void Draw(object shape)

  {

  ...  // do something

  }

 

  // class's own method

  public void MoveShape(int newX, int newY)

  {

  .....

  }

 

}

-------------------

Arrays(陣列)

-------------------

C#中的陣列比C++的表現更好。陣列被分配在堆中,因此是引用型別。你不可能訪問超出一個陣列邊界的元素。因此,C#會防止這樣型別的。一些輔助方式可以迴圈依次訪問陣列元素的功能也被提供了,foreach就是這樣的一個語句。與C++相比,C#在陣列語法上的特點如下:

方括號被置於資料型別之後而不是在變數名之後。

建立陣列元素要使用new運算子。

C#支援一維、多維以及交錯陣列(陣列中的陣列)。

示例:

  int[] array = new int[10];  // 整型一維陣列

  for (int i = 0; i < array.Length; i++)

  array[i] = i;

  int[,] array2 = new int[5,10];  // 整型二維陣列

  array2[1,2] = 5;

  int[,,] array3 = new int[5,10,5];  // 整型的三維陣列

  array3[0,2,4] = 9;

  int[][] arrayOfarray = = new int[2];  // 整型交錯陣列(陣列中的陣列)

  arrayOfarray[0] = new int[4];

  arrayOfarray[0] = new int[] {1,2,15};

-------------------

-------------------

索引器被用於寫一個訪問集合元素的方法,集合使用"[]"這樣的直接方式,類似於陣列。你所要做的就是列出訪問例項或元素的索引清單。類的屬性帶的是輸入引數,而索引器帶的是元素的索引表,除此而外,他們二者的語法相同。

示例:

注意:CollectionBase是一個製作集合的庫類。List是一個protected型的CollectionBase成員,儲存著集合清單列表。

class Shapes: CollectionBase

{

  public void add(Shape shp)

  {

  List.Add(shp);

  }

  //indexer

  public Shape this[int index]

  {

  get {

  return (Shape) List[index];

  }

  set {

  List[index] = value ;

  }

  }

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-984619/,如需轉載,請註明出處,否則將追究法律責任。

相關文章