7.集合和foreach語句
C#提供一個for循環的捷徑,而且它還促進了集合類更為一致:
在Java或C++中:
1. while (! collection.isEmpty())
{
Object o = collection.get();
collection.next()
//...
2. for (int i = 0; i < array.length; i++)
//...
在 C#中:
1. foreach (object o in collection)
//...
2. foreach (int i in array)
//...
C#的for循環將工作於集合對象上(數組實現一個集合)。集合對象有一個GetEnumerator()方法,該方法返回一個Enumerator對象。Enumerator對象有一個MoveNext()方法和一個Current屬性。
8.結構
把C#的結構視為使語言的類型系統更為優雅而不僅是一種“如果你需要的話可以利用之寫出真正有效率的代碼”的概念更好些。
在C++中,結構和類(對象)都可分配在棧或堆上。在C#中,結構永遠創建在棧上,類(對象)則永遠創建在堆上。使用結構實際上可以生成更有效率的代碼:
public struct Vector
{
public float direction;
public int magnitude;
}
Vector[] vectors = new Vector [1000];
這將把1000個Vector分配在一塊空間上,這比我們把Vector聲明為類並使用for循環去實例化1000個獨立的Vector來得有效率得多。【譯注:因懷疑原文有誤,此處故意漏譯一句,但不應影響你對這節內容的理解】:
int[] ints = new ints[1000];//【譯注:此處代碼有誤,應為int[] ints = new int[1000];】
C#完全允許你擴展內建在語言中的基本類型集。實際上,C#所有的基本類型都以結構方式實現的。int型只不過是System.Int32結構的別名,long型不過是System.Int64結構的別名等等。這些基本類型當然可被編譯器特別處理,但是語言本身並無區別【譯注:意思是語言自身對處理所有類型提供了一致的方法】。在下一節中,我們可看到C#是如何做到這一點的。