2013-01-03 33 views
8

Tôi chỉ thấy này trong C# dự án:cú pháp “Strange” C# bất động sản

public char this[int index] 

I consider myself mới đến C#; bất kỳ ai có thể giúp ý nghĩa của nó?

+3

"Tôi nghĩ bản thân mình mới với C# bất kỳ ai có thể giúp những gì nó có nghĩa là trong c + +" Chờ đợi, những gì? – BoltClock

+2

@BoltClock Một người C++ đã thấy điều này trong C#? – Shark

+2

@Shark: Đó cũng là những gì tôi nghĩ - nhưng chỉ sau một lần chụp hai lần. – BoltClock

Trả lời

15

Đây là chỉ mục.

Chỉ mục cho phép các trường hợp của một lớp hoặc cấu trúc được lập chỉ mục giống như các mảng . Các chỉ mục giống với các thuộc tính ngoại trừ các trình truy cập của chúng có các tham số . Trình chỉ mục cung cấp cú pháp giống như mảng. Nó cho phép một loại được truy cập giống như một mảng. Các thuộc tính như người lập chỉ mục thường truy cập vào cửa hàng sao lưu . Chúng ta thường chấp nhận một tham số kiểu int và truy cập vào một kho lưu trữ của kiểu mảng.

đã đọc nó từ http://www.dotnetperls.com/indexer

string s = "hello"; 
Console.WriteLine (s[0]); // 'h' 
Console.WriteLine (s[3]); // 'l' 

Thực hiện một indexer

Để viết một indexer, xác định một tài sản được gọi này, quy định cụ thể các đối số trong vuông dấu ngoặc đơn. Ví dụ:

class Sentence 
{ 
    string[] words = "The quick brown fox".Split(); 
    public string this [int wordNum] // indexer 
    { 
     get { return words [wordNum]; } 
     set { words [wordNum] = value; } 
    } 
} 

Đây là cách chúng ta có thể sử dụng indexer này:

Sentence s = new Sentence(); 
Console.WriteLine (s[3]); // fox 
s[3] = "kangaroo"; 
Console.WriteLine (s[3]); // kangaroo 

Một loại có thể tuyên bố nhiều chỉ mục, mỗi tham số có kiểu khác nhau. Một indexer cũng có thể mất nhiều hơn một tham số:

public string this [int arg1, string arg2] 
{ 
    get { ... } set { ... } 
} 

Indexer trong nội bộ biên dịch với các phương pháp được gọi là get_Itemset_Item, như sau:

public string get_Item (int wordNum) {...} 
public void set_Item (int wordNum, string value) {...} 

Trình biên dịch chọn tên Item theo mặc định-bạn có thể thực sự thay đổi điều này bằng cách trang trí người lập chỉ mục của bạn với thuộc tính sau:

[System.Runtime.CompilerServices.IndexerName ("Blah")] 
7

Đó gọi là một indexer. Đọc thêm về chúng at MSDN.

Các vấn đề liên quan