Tài liệu Hướng Đối Tượng Trong C# part 9 ppt

3 310 0
Tài liệu Hướng Đối Tượng Trong C# part 9 ppt

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

Thông tin tài liệu

Bộ lập chỉ mục : Indexer không phải là một phần quan trọng của lập trình hướng đối tượng. Nhưng chúng mô tả cú pháp tiện lợi cho phép các lớp được sử dụng trực quan hơn. Chúng cho phép bạn truy cập đến một đối tượng nếu nó là một mảng. Thêm một Indexer vào vector : Chúng ta tiếp tục sử dụng struct Vector ở trên để mô tả cách sử dụng Indexer. Để tham khả o đến các thành phần của struct vector với tên x,y,z. Và sự cố là các nhà toán học thường thích xem vector như là mảng với x là phần tử đầu, y là phần tử thứ hai và z là phần tử thứ ba. Và để gán giá trị cho x ta thường làm như sau: MyVector[0] = 3.6; Nếu xem vector như là mảng chúng ta thường có thể thực hiện các thao tác như lập lại: for(int i = 0; i < 3; i++) { vect2[i] = i; } Với sự định nghĩa vector như hiện tại thì đoạn mã này sẽ tạo ra một lỗi nhỏ trong thời gian biên dịch, vì trình biên dịch không hiểu cái nào là phần tử đầu tiên của vector. Chính vì thế indexer sẽ giải quyết vấn đề này. Indexer được định nghĩa như các thuộc tính với các bộ truy nhập get và set. Điểm khác nhau chính đó là tên của indexer là từ khoá this. Để định nghĩa một indexer cho m ột struct vector ta làm như sau: struct Vector { public double x, y, z; public double this [int i] { get { switch (i) { case 0: return x; case 1: return y; case 2: return z; default: throw new IndexOutOfRangeException( "Attempt to retrieve Vector element " + i) ; } } set { switch (i) { case 0: x = value; break; case 1: y = value; break; case 2: z = value; break; default: throw new IndexOutOfRangeException( "Attempt to set Vector element " + i); } } } // etc. Một điểm mới trong đoạn mã trên là khai báo một indexer: public double this [int i] Dòng này có nghĩa chúng ta xem mọi thể hiện vector như là một mảng với chỉ mục kiểu int và trả về kiểu của phần tử là double. Bên trong phần thân của indexer, chúng ta có cùng bộ truy nhập get và set. Nếu bạn muốn tạo indexer mang tính chỉ đọc hay chỉ ghi thì bạn có thể bỏ bộ truy nhập thích hợp. Bộ truy nhập get trả về ki ểu đã khai báo trên indexer, set thì không trả về giá trị nào cả và nó truy cập đến một tham số tường minh, value. Bây giờ chúng ta thêm vào indexer của chúng ta như sau: static void Main() { Vector vect1 = new Vector(1.0, -5.0, 4.6); Vector vect2 = new Vector(); Console.WriteLine("vect1 = " + vect1); Console.WriteLine("vect1[1] = " + vect1[1]); for(int i = 0; i < 3; i++) { vect2[i] = i; } Console.WriteLine("vect2 = " + vect2); Ví dụ này việc sử dụng một vòng lặp tạo chỉ mục cho các thành phần của vector. Kết quả xuất ra là: VectorWithIndexer vect1 = ( 1 , -5 , 4.6 ) vect1[1] = -5 vect2 = ( 0 , 1 , 2 ) Thực thi chương trình trên  . Với sự định nghĩa vector như hiện tại thì đoạn mã này sẽ tạo ra một lỗi nhỏ trong thời gian biên dịch, vì trình biên dịch không hiểu cái nào là phần tử. "Attempt to set Vector element " + i); } } } // etc. Một điểm mới trong đoạn mã trên là khai báo một indexer: public double this [int i] Dòng

Ngày đăng: 21/01/2014, 16:20

Từ khóa liên quan

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

Tài liệu liên quan