經常用string[], int[]這些數組, 今天偶然發現還有一個System.Array類, 它的聲明如下:
| 代碼如下 |
複製代碼 |
public abstract class Array : ICloneable, IList, ICollection, IEnumerable, IStructuralComparable, IStructuralEquatable |
看來它是一個抽象類別.
查一下msdn, 發現它的用途如下:
"提供建立、操作、搜尋和排序數組的方法,因而在通用語言執行平台中用作所有數組的基類。"
"Array 類是支援數組的語言實現的基類。但是,只有系統和編譯器能夠從 Array 類顯式派生。使用者應當使用由語言提供的數組構造。"
自己寫代碼試了一下, 確實如上所述, 不能繼承Array這個抽象類別,
Array的使用方法舉例:
| 代碼如下 |
複製代碼 |
Array abc = Array.CreateInstance(typeof(string), 3); abc.SetValue("lzd1", 0); abc.SetValue("lzd2", 1); abc.SetValue("lzd3", 2); for (int i = 0; i < abc.Length; i++) { Console.WriteLine(abc.GetValue(i)); } |
看這代碼,覺得和string[], int[]的本質是一樣的,就是繁瑣些,難怪msdn說它是所有數組的基類,但是用refactor翻譯一段string[],int[]的代碼,發現編譯後並不翻譯成Array,不知道內部它們之間是怎麼轉換的,先不管這也罷,反正最重要的思考一下Array的作用和用途在哪裡?畢竟直接定義的數組比Array.CreateInstance()要簡單得多。
試一下就可以明白,直接定義的數組不支援排序等操作,如果定義了string[], int[],想要排序,就可以用Array抽象類別中的Sort方法了,我想,這是它很有用的一點了。
| 代碼如下 |
複製代碼 |
string[] def = new string[] { "lzd7", "lzd5", "lzd6" }; for (int i = 0; i < def.Length; i++) { Console.WriteLine(def[i]); } Array.Sort(def); for (int i = 0; i < def.Length; i++) { Console.WriteLine(def[i]); } |