2010-03-29 5 views
3

J'ai un (décharge) question concernant VB/C#Howto écrire une classe où une propriété est accessible sans le nommer

J'utilise souvent des classes tiers où je peux accéder à un objet enfant ne spécifier l'ID ou clé.

Exemple:

Au lieu d'écrire:

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

J'utiliser ce code pour accéder aux membres:

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

Quelqu'un peut-il me dire comment une classe doit ressembler à un soutien cette syntaxe? Ma propre classe a un dictionnaire auquel je veux accéder de cette façon.

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

Répondre

11

Vous devez avoir un indexed property.

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

Merci beaucoup. C'était le signal dont j'avais besoin. –