Ngôn Ngữ Lập Trình C# // dòng đầu tiên có 5 phần tử jaggedArray[0] = new int[5]; // dòng thứ hai có 2 phần tử jaggedArray[1] = new int[2]; // dòng thứ ba có 3 phần tử jaggedArray[2] = new int[3]; // dòng cuối cùng có 5 phần tử jaggedArray[3] = new int[5]; Sau khi tạo các dòng cho mảng xong, ta thực hiện việc đưa các giá trị vào các thành phần của mảng. Và cuối cùng là xuất nội dung của mảng ra màn hình. Ghi chú: Khi chúng ta truy cập các thành phần của mảng kích thước bằng nhau, chúng ta đặt tất cả các chỉ mục của các chiều vào trong cùng dấu ngặc vuông: rectangularArray[i,j] Tuy nhiên với mảng có kích thước khác nhau ta phải để từng chỉ mục của từng chiều trong đấu ngoặc vuông riêng: jaggedArray[i][j] Chuyển đổi mảng Những mảng có thể chuyển đổi với nhau nếu những chiều của chúng bằng nhau và nếu các kiểu của các thành phần có thể chuyển đổi được. Chuyển đổi tường minh giữa các mảng xảy ra nếu các thành phần của những mảng có thể chuyển đổi tường minh. Và ngược lại, chuyển đổi ngầm định của mảng xảy ra nếu các thành phần của những mảng có thể chuyển đổi ngầm định. Nếu một mảng chứa những tham chiếu đến những đối tượng tham chiếu, một chuyển đổi có thể được tới một mảng của những đối tượng cơ sở. Ví dụ 9.7 minh họa việc chuyển đổi một mảng kiểu Button đến một mảng những đối tượng. Ví dụ 9.7: Chuyển đổi giữa những mảng. namespace Programming_CSharp { using System; // tạo lớp để lưu trữ trong mảng public class Employee { public Employee( int empID) { this.empID = empID; } Mảng, Chỉ Mục, và Tập Hợp 228 . . Ngôn Ngữ Lập Trình C# public override string ToString() { return empID.ToString(); } // biến thành viên private int empID; private int size; } public class Tester { // phương thức này lấy một mảng các object // chúng ta truyền vào mảng các đối tượng Employee // và sau đó là mảng các string, có sự chuyển đổi ngầm // vì cả hai điều dẫn xuất từ lớp object public static void PrintArray(object[] theArray) { Console.WriteLine(“Contents of the Array: {0}”, theArray.ToString()); // in ra từng thành phần trong mảng foreach (object obj in theArray) { // trình biên dịch sẽ gọi obj.ToString() Console.WriteLine(“Value: {0}”, obj); } } static void Main() { // tạo mảng các đối tượng Employee Employee[] myEmployeeArray = new Employee[3]; // khởi tạo các đối tượng của mảng for (int i = 0; i < 3; i++) { myEmployeeArray[i] = new Employee(i+5); } // hiểu thị giá trị của mảng PrintArray( myEmployeeArray ); // tạo mảng gồm hai chuỗi string[] array ={ “hello”, “world”}; // xuất ra nội dung của chuỗi Mảng, Chỉ Mục, và Tập Hợp 229 . . Ngôn Ngữ Lập Trình C# PrintArray( array ); } } } Kết quả: Contents of the Array Programming_CSharp.Employee[] Value: 5 Value: 6 Value: 7 Contents of the Array Programming_CSharp.String[] Value: hello Value: world Ví dụ 9.7 bắt đầu bằng việc tạo một lớp đơn giản Employee như các ví dụ trước. Lớp Tester bây giờ được thêm một phương thức tĩnh PrintArray() để xuất nội dung của mảng, phương thức này có khai báo một tham số là mảng một chiều các đối tượng object: public static void PrintMyArray( object[] theArray) object là lớp cơ sở ngầm định cho tất cả các đối tượng trong môi trường .NET, nên nó được khai báo ngầm định cho cả hai lớp string và Employee. Phương thức PrintArray thực hiện hai hành động. Đầu tiên, là gọi phương thức ToString() của mảng: Console.WriteLine(“Contents of the Array {0}”, theArray.ToString()); Tên của kiểu dữ liệu mảng được in ra: Contents of the Array Programming_CSharp.Employee[] Contents of the Array System.String[] Sau đó phương thức PrintArray thực hiện tiếp việc gọi phương thức ToString() trong mỗi thành phần trong mảng nhận được. Do ToString() là phương thức ảo của lớp cơ sở object, và chúng ta đã thực hiện phủ quyết trong lớp Employee. Nên phương thức ToString() của lớp Employee được gọi. Việc gọi ToString() có thể không cần thiết, nhưng nếu gọi thì cũng không có hại gì và nó giúp cho ta đối xử với các đối tượng một cách đa hình. System.Array Lớp mảng Array chứa một số các phương thức hữu ích cho phép mở rộng những khả năng của mảng và làm cho mảng mạnh hơn những mảng trong ngôn ngữ khác (xem bảng 9.1). Hai phương thức tĩnh hữu dụng của lớp Array là Sort() và Reverse(). Có một cách hỗ trợ đầy đủ cho những kiểu dữ liệu nguyên thủy như là kiểu. Đưa mảng làm việc với những kiểu khác Mảng, Chỉ Mục, và Tập Hợp 230 . . Ngôn Ngữ Lập Trình C# như Button có một số khó khăn hơn. Ví dụ 9.8 minh họa việc sử dụng hai phương thức để thao tác đối tượng chuỗi. Ví dụ 9.8: Sử dụng Array.Sort() và Array.Reverse(). namespace Programming_CSharp { using System; public class Tester { public static void PrintArray(object[] theArray) { foreach( object obj in theArray) { Console.WriteLine(“Value: {0}”, obj); } Console.WriteLine(“\n”); } static void Main() { string[] myArray = { “Who”, “is”,”Kitty”,”Mun” }; PrintArray( myArray ); Array.Reverse( myArray ); PrintArray( myArray ); string[] myOtherArray = { “Chung”, “toi”, “la”, “nhung”,”nguoi”, ”lap”,”trinh”, “may”, “tinh” }; PrintArray( myOtherArray ); Array.Sort( myOtherArray ); PrintArray( myOtherArray ); } } } Mảng, Chỉ Mục, và Tập Hợp 231 . . Ngôn Ngữ Lập Trình C# Kết quả: Value: Who Value: is Value: Kitty Value: Mun Value: Mun Value: Kitty Value: is Value: Who Value: Chung Value: toi Value: la Value: nhung Value: nguoi Value: lap Value: trinh Value: may Value: tinh Value: Chung Value: la Value: lap Value: may Value: nguoi Value: nhung Value: tinh Value: toi Value: trinh Ví dụ bắt đầu bằng việc tạo mảng myArray, mảng các chuỗi với các từ sau: “Who”, “is”, “Kitty”, ”Mun” mảng này được in ra, sau đó được truyền vào cho hàm Array.Reverse(), kết quả chúng ta thấy là kết quả của chuỗi như sau: Value: Mun Value: Kitty Value: is Mảng, Chỉ Mục, và Tập Hợp 232 . . . int[5]; Sau khi tạo các dòng cho mảng xong, ta thực hiện việc đưa các giá trị vào các thành phần của mảng. Và cuối cùng là xuất nội dung của mảng ra màn hình. Ghi chú: Khi chúng ta truy cập các thành. đối xử với các đối tượng một cách đa hình. System.Array Lớp mảng Array chứa một số các phương thức hữu ích cho phép mở rộng những khả năng của mảng và làm cho mảng mạnh hơn những mảng trong ngôn. một mảng chứa những tham chiếu đến những đối tượng tham chiếu, một chuyển đổi có thể được tới một mảng của những đối tượng cơ sở. Ví dụ 9.7 minh họa việc chuyển đổi một mảng kiểu Button đến một