Как написать класс, к которому можно обращаться к свойству, не называя его - PullRequest
3 голосов
/ 29 марта 2010

У меня есть (дамп) вопрос относительно VB / C #

Я часто использую сторонние классы, где я могу получить доступ к дочернему объекту, указав только идентификатор или ключ.

Пример:

Вместо записи:

DataRow row = GetAPopulatedDataRowSomeWhere();
Object result = row.Items[1]; // DataRow has no Items property
Object result = row.Items["colName"]; // Also not possible

Я использую этот код для доступа к членам:

DataRow row = GetAPopulatedDataRowSomeWhere();
Object result = row[1];
Object result = row["colName"];

Может кто-нибудь сказать мне, как должен выглядеть класс для поддержки этого синтаксиса? В моем собственном классе есть словарь, к которому я хочу получить доступ таким образом.

MyClass["key"]; // <- that's what I want
MyClass.SubItems["key"]; // <- that's how I use it now

1 Ответ

11 голосов
/ 29 марта 2010

Вам нужно иметь индексированное свойство .

public class MyClass
{
    public object this[string key]
    {
        get { return SubItems[key]; }
        set { SubItems[key] = value; }
    }
}
...