Giáo trình hình thành quy trình ứng dụng cấu tạo bo mạch mảng một chiều trong dấu ngoặc p2

10 5 0
Giáo trình hình thành quy trình ứng dụng cấu tạo bo mạch mảng một chiều trong dấu ngoặc p2

Đang tải... (xem toàn văn)

Thông tin tài liệu

. Ngôn Ngữ Lập Trình C# Value: Who Tương tự như vậy, ví dụ cũng tạo ra mảng thứ hai, myOtherArray, chứa những từ sau: “Chung”, “toi”, “la”, “nhung”,”nguoi”, ”lap”,”trinh”, “máy”, “tính” Sau khi gọi phương thức Array.Sort() thì các thành phần của mảng được sắp xếp lại theo thứ tự alphabe: Value: Chung Value: la Value: lap Value: may Value: nguoi Value: nhung Value: tinh Value: toi Value: trinh Bộ chỉ mục Đôi khi chúng ta chúng ta mong muốn truy cập một tập hợp bên trong một lớp như thể bản thân lớp là một mảng. Ví dụ, giả sử chúng ta tạo một điều khiển...

Ngơn Ngữ Lập Trình C# Value: Who Tương tự vậy, ví dụ tạo mảng thứ hai, myOtherArray, chứa từ sau: “Chung”, “toi”, “la”, “nhung”,”nguoi”, ”lap”,”trinh”, “máy”, “tính” Sau gọi phương thức Array.Sort() thành phần mảng xếp lại theo thứ tự alphabe: Value: Chung Value: la Value: lap Value: may Value: nguoi Value: nhung Value: tinh Value: toi Value: trinh Bộ mục Đôi chúng ta mong muốn truy cập tập hợp bên lớp thể thân lớp mảng Ví dụ, giả sử tạo điều khiển kiểu ListBox tên myListBox chứa danh sách chuỗi lưu trữ mảng chiều, biến thành viên private myStrings Một List Box chứa thuộc tính thành viên phương thức thêm vào mảng chứa chuỗi Tuy nhiên, thuận tiện truy cập mảng ListBox với mục thể ListBox mảng thật Ví dụ, ta truy cập đối tượng ListBox tạo sau: string theFirstString = myListBox[0]; string theLastString = myListBox[myListBox.Length - 1]; Bộ mục chế cho phép thành phần client truy cập tập hợp chứa bên lớp cách sử dụng cú pháp giống truy cập mảng ([]) Chỉ mục loại thuộc tính đặc biệt bao gồm phương thức get() set() để xác nhận hành vi chúng Chúng ta khai báo thuộc tính mục bên lớp cách sử dụng cú pháp sau: this [ ] { get; set; } Kiểu trả định kiểu đối tượng trả mục, kiểu đối mục xác định kiểu đối mục dùng để làm số vào tập hợp chứa đối tượng đích Mặc dù kiểu mục thường dùng kiểu nguyên, 233 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# dùng mục cho tập hợp kiểu liệu khác, kiểu chuỗi Chúng ta cung cấp mục với nhiều tham số để tạo mảng đa chiều Từ khóa this tham chiếu đến đối tượng nơi mà mục xuất Như thuộc tính bình thường, định nghĩa phương thức get() set() để xác định đối tượng mảng yêu cầu truy cập hay thiết lập Ví dụ 9.9 khai báo điều khiển ListBox, tên ListBoxTest, đối tượng chứa mảng đơn giản (myStrings) mục để truy cập nội dung mảng Ghi chú: Đối với lập trình C++, mục đưa giống việc nạp chồng tốn tử mục ([]) ngơn ngữ C++ Tốn tử mục không nạp chồng ngôn ngữ C#, thay mục  Ví dụ 9.9: Sử dụng mục namespace Programming_CSharp { using System; // tạo lớp ListBox public class ListBoxTest { // khởi tạo ListBox với chuỗi public ListBoxTest( params string[] initialStrings) { // cấp phát không gian cho chuỗi strings = new String[256]; // copy chuỗi truyền từ tham số foreach ( string s in initialStrings) { strings[ctr++] = s; } } // thêm chuỗi public void Add(string theString) { if (ctr >= strings.Length) { // xử lý mục sai } else strings[ctr++] = theString; Mảng, Chỉ Mục, Tập Hợp 234 Ngôn Ngữ Lập Trình C# } // thực truy cập public string this[int index] { get { if ( index < || index >= strings.Length) { // xử lý mục sai } return strings[index]; } set { if ( index >= ctr) { // xử lý lỗi mục không tồn } else strings[index] = value; } } // lấy số lượng chuỗi lưu giữ public int GetNumEntries() { return ctr; } // biến thành vịên lưu giữ mảng cho mục private string[] strings; private int ctr = 0; } // lớp thực thi public class Tester { static void Main() { // tạo đối tượng ListBox khởi tạo ListBoxTest lbt = new ListBoxTest(“Hello”,”World”); Mảng, Chỉ Mục, Tập Hợp 235 Ngơn Ngữ Lập Trình C# // thêm số chuỗi vào lbt lbt.Add(“Who”); lbt.Add(“is”); lbt.Add(“Ngoc”); lbt.Add(“Mun”); // dùng mục string strTest = “Universe”; lbt[1] = strTest; // truy cập xuất tất chuỗi for(int i = 0; i < lbt.GetNumEntries(); i++) { Console.WriteLine(“lbt[{0}]: {1}”, i, lbt[i]); } } } }  Kết quả: lbt[0]: Hello lbt[1]: Universe lbt[2]: Who lbt[3]: is lbt[4]: Ngoc lbt[5]: Mun Trong chương trình trên, đối tượng ListBox lưu giữ mảng chuỗi myStrings biến thành viên ctr đếm số chuỗi chứa mảng myStrings Chúng ta khởi tạo mảng tối đa 256 chuỗi sau: myStrings = new String[256]; Phần lại khởi dựng thêm chuỗi truyền vào tham số, đơn giản dùng lệnh lặp foreach để lấy thành phần mảng tham số đưa vào myStrings Ghi chú: Nếu số lượng tham số truyền vào phương thức, sử dụng từ khóa params mô tả phần trước chương Phương thức Add() ListBoxTest khơng làm khác thêm chuỗi vào bên mảng myStrings Tuy nhiên phương thức quan trọng ListBoxTest mục Một mục khơng có tên nên ta dùng từ khóa this: public string this [int index] Mảng, Chỉ Mục, Tập Hợp 236 Ngơn Ngữ Lập Trình C# Cú pháp mục tương tự thuộc tính Chúng có phương thức get() hay set() hay hai phương thức Phương thức get() thực thi cách kiểm tra giá trị biên mục giả sử mục địi hỏi hợp lệ, phương thức trả giá trị đòi hỏi: get { if (index < || index >= myStrings.Length) { // xử lý mục sai } return myStrings[index]; } Đối với phương thức set() kiểm trả xem mục đối tượng cần lấy có vượt số lượng đối tượng mảng hay không Nếu giá trị mục hợp lệ tức tồn đối tượng có mục tương đương, phương thức bắt đầu thiết lập lại giá trị đối tượng Từ khóa value sử dụng để tham chiếu đến tham số đưa vào phép gán thuộc tính: set { if ( index >= ctr) { // mục không tồn } } Do vậy, viết: myStrings[10] = “Hello C#”; trình biên dịch gọi phương thức set() mục đối tượng truyền vào chuỗi “Hello C#” tham số ngầm định tên value Bộ mục phép gán Trong ví dụ 9.9, khơng thể gán đến mục khơng có giá trị Do đó, viết: lbt[10] = “ah!”; Chúng ta viết điều kiện ràng buộc bên phương thức set(), lưu ý mục mà truyền vào 10 lớn đếm số đối tượng thời Dĩ nhiên, sử dụng phương thức set() cho phép gán, đơn giản phải xử lý mục mà ta nhận Để làm điều này, phải thay đổi phương thức set() để kiểm tra giá trị Length đệm giá trị thời đếm số đối tượng Mảng, Chỉ Mục, Tập Hợp 237 Ngơn Ngữ Lập Trình C# Nếu giá trị nhập vào cho mục chưa có giá trị, cập nhật đếm sau: set { if ( index >= strings.Length) { // mục vượt số tối đa mảng } else { strings[index] = value; if ( ctr < index+1) ctr = index+1; } } Điều cho phép tạo mảng phân mảng giá trị, ta gán cho đối tượng có mục thứ 10 mà khơng cần phải có phép gán với đối tượng trước có mục Điều hoàn toàn thực tốt ban đầu cấp phát mảng 256 phần tử Do cần truy cập đến đối tượng có mục từ đến 255 hợp lệ Khi ta viết: lbt[10] = “ah!”; Kết thực tương tự sau: lbt[0]: Hello lbt[1]: Universe lbt[2]: Who lbt[3]: is lbt[4]: Ngoc lbt[5]: Mun lbt[6]: lbt[7]: lbt[8]: lbt[9]: lbt[10]: “ah!” Sử dụng kiểu số khác Ngơn ngữ C# khơng địi hỏi phải sử dụng giá trị nguyên làm mục tập hợp Khi tạo lớp có chứa tập hợp tạo mục, mục 238 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# sử dụng kiểu chuỗi làm mục hay kiểu liệu khác kiểu số nguyên thường dùng Trong trường hợp lớp ListBox trên, muốn dùng giá trị chuỗi làm mục cho mảng string Ví dụ 9.10 sau sử dụng chuỗi làm mục cho lớp ListBox Bộ mục gọi phương thức findString() để lấy giá trị trả số nguyên dựa chuỗi cung cấp Lưu ý mục nạp chồng mục từ ví dụ 9.9 trước cịn tồn  Ví dụ 9.10: Nạp chồng mục namespace Programming_CSharp { using System; // tạo lớp List Box public class ListBoxTest { // khởi tạo với chuỗi public ListBoxTest(params string[] initialStrings) { // cấp phát chuỗi strings = new String[256]; // copy chuỗi truyền vào foreach( string s in initialStrings) { strings[ctr++] = s; } } // thêm chuỗi vào cuối danh sách public void Add( string theString) { strings[ctr] = theString; ctr++; } // mục public string this [ int index ] { get { if (index < || index >= strings.Length) 239 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# { // mục không hợp lệ } return strings[index]; } set { strings[index] = value; } } private int findString( string searchString) { for(int i = 0; i < strings.Length; i++) { if ( strings[i].StartsWith(searchString)) { return i; } } return -1; } // mục dùng chuỗi public string this [string index] { get { if (index.Length == 0) { // xử lý chuỗi rỗng } return this[findString(index)]; } set { strings[findString(index)] = value; } } // lấy số chuỗi mảng 240 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# public int GetNumEntries() { return ctr; } // biến thành viên lưu giữ mảng chuỗi private string[] strings; // biến thành viên lưu số chuỗi mảng private int ctr = 0; } public class Tester { static void Main() { // tạo đối tượng List Box sau khởi tạo ListBoxTest lbt = new ListBoxTest(“Hello”,”World”); // thêm chuỗi vào lbt.Add(“Who”); lbt.Add(“is”); lbt.Add(“Ngoc”); lbt.Add(“Mun”); // truy cập mục string str = “Universe”; lbt[1] = str; lbt[“Hell”] = “Hi”; //lbt[“xyzt”] = “error!”; // lấy tất chuỗi for(int i = 0; i < lbt.GetNumEntries();i++) { Console.WriteLine(“lbt[{0}] = {1}”, i, lbt[i]); } } } }  Kết quả: lbt[0]: Hi lbt[1]: Universe lbt[2]: Who 241 Mảng, Chỉ Mục, Tập Hợp Ngôn Ngữ Lập Trình C# lbt[3]: is lbt[4]: Ngoc lbt[5]: Mun Ví dụ 9.10 tương tự ví dụ 9.9 ngoại trừ việc thêm vào mục nạp chồng lấy tham số mục chuỗi phương thức findString() tạo để lấy mục nguyên từ chuỗi Phương thức findString() đơn giản lặp mảng strings tìm chuỗi có ký tự trùng với ký tự chụổi tham số Nếu tìm thấy trả mục chuỗi, trường hợp ngược lại trả -1 Như thấy hàm Main(), lệnh truy cập mục thứ hai dùng chuỗi làm tham số mục, làm với số nguyên trước: lbt[“hell”] = “Hi”; Khi nạp chồng mục gọi, sau kiểm tra chuỗi hợp lệ tức không rỗng, chuỗi truyền vào cho phương thức findString(), kết findString() trả mục nguyên, số nguyên sử dụng làm mục: return this[ findString(index)]; Ví dụ 9.10 tồn lỗi chuỗi truyền vào không phù hợp với chuỗi mảng, giá trị trả –1 Sau giá trị dùng làm mục vào chuỗi mảng strings Điều tạo ngoại lệ (System.NullReferenceException) Trường hợp xảy bỏ đấu comment lệnh: lbt[“xyzt”] = ”error!”; Các trường hợp phát sinh lỗi cần phải loại bỏ, tập cho làm thêm việc cần thiết Giao diện tập hợp Môi trường NET cung cấp giao diện chuẩn cho việc liệt kê, so sánh, tạo tập hợp Một số giao diện số liệt kê bảng 9.2 sau: Giao diện IEnumerable ICollection IComparer IList Mảng, Chỉ Mục, Tập Hợp Mục đích Liệt kê thơng qua tập hợp cách sử dụng foreach Thực thi tất tập hợp để cung cấp phương thức CopyTo() thuộc tính Count, ISReadOnly, ISSynchronized, SyncRoot So sánh hai đối tượng lưu giữ tập hợp để xếp đối tượng tập hợp Sử dụng tập hợp mảng mục 242 ... Trong chương trình trên, đối tượng ListBox lưu giữ mảng chuỗi myStrings biến thành viên ctr đếm số chuỗi chứa mảng myStrings Chúng ta khởi tạo mảng tối đa 256 chuỗi sau:... 9.9: Sử dụng mục namespace Programming_CSharp { using System; // tạo lớp ListBox public class ListBoxTest { // khởi tạo ListBox với chuỗi public ListBoxTest(... “ah!” Sử dụng kiểu số khác Ngơn ngữ C# khơng địi hỏi phải sử dụng giá trị nguyên làm mục tập hợp Khi tạo lớp có chứa tập hợp tạo mục, mục 238 Mảng, Chỉ Mục, Tập Hợp Ngơn Ngữ Lập Trình C# sử dụng

Ngày đăng: 21/05/2021, 12:46

Tài liệu cùng người dùng

Tài liệu liên quan