2010-03-25 30 views
12

Tôi biết rõ C#, nhưng đó là điều gì đó kỳ lạ đối với tôi. Trong một số chương trình cũ, tôi đã thấy mã này:Từ khóa 'này' là tài sản

public MyType this[string name] 
{ 
    ......some code that finally return instance of MyType 
} 

Làm thế nào nó được gọi? cái này dùng như thế nào?

Trả lời

25

Đây là indexer. Sau khi bạn khai báo, bạn có thể làm như sau:

class MyClass 
{ 
    Dictionary<string, MyType> collection; 
    public MyType this[string name] 
    { 
     get { return collection[name]; } 
     set { collection[name] = value; } 
    } 
} 

// Getting data from indexer. 
MyClass myClass = ... 
MyType myType = myClass["myKey"]; 

// Setting data with indexer. 
MyType anotherMyType = ... 
myClass["myAnotherKey"] = anotherMyType; 
+0

Câu trả lời này sẽ hoàn chỉnh hơn nếu bạn cho thấy thuộc tính nhận (và/hoặc đặt) accessor trong khối ".... some code" của bạn. Điều này cho thấy nó giống như một phương pháp. –

+0

Cảm ơn, tôi đã cập nhật câu trả lời. –

+0

Và ít phổ biến hơn nhiều bằng cách xây dựng các bộ sưu tập chung bao gồm hầu hết nhu cầu của mọi người. Không cần phải viết bộ sưu tập mạnh mẽ của riêng bạn để có được hành vi tiêu chuẩn nữa. –

6

Đây là Indexer Property. Nó cho phép bạn "truy cập" lớp của bạn trực tiếp theo chỉ mục, giống như cách bạn truy cập một mảng, một danh sách hoặc một từ điển.

Trong trường hợp của bạn, bạn có thể có một cái gì đó như:

public class MyTypes 
{ 
    public MyType this[string name] 
    { 
     get { 
      switch(name) { 
       case "Type1": 
         return new MyType("Type1"); 
       case "Type2": 
         return new MySubType(); 
      // ... 
      } 
     } 
    } 
} 

Sau đó bạn sẽ có thể sử dụng điều này như:

MyTypes myTypes = new MyTypes(); 
MyType type = myTypes["Type1"]; 
2

Đây là tài sản đặc biệt được gọi là Chỉ mục. Điều này cho phép lớp của bạn được truy cập như một mảng.

myInstance[0] = val; 

Bạn sẽ thấy hành vi này thường xuyên nhất trong bộ sưu tập tùy chỉnh, như các mảng cú pháp là một giao diện nổi tiếng với việc tiếp cận các yếu tố trong một bộ sưu tập có thể được xác định bởi một giá trị quan trọng, thường là vị trí của họ (như trong mảng và danh sách) hoặc bằng khóa logic (như trong từ điển và hashtables).

Bạn có thể tìm hiểu thêm về chỉ mục trong bài viết MS2 Indexers (C# Programming Guide).

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