Zugreifen auf Standardelemente
Aktualisiert: November 2007
Jeder Typ kann einen Standardmember enthalten. Dieser wird aufgerufen, wenn im Aufruf kein Membername angegeben wurde. Im folgenden Beispiel wird der Standardmember von Class1 aufgerufen und der zurückgegebene Wert i zugewiesen.
Dim i As Integer
Dim c As New Class1()
i = Convert.ToInt32(c)
Standardmember werden durch System.Reflection.DefaultMemberAttribute gekennzeichnet. Folgendes Beispiel verdeutlicht, wie der Standardmember durch Abruf seines benutzerdefinierten Attributs abgerufen wird.
Dim t As Type = GetType(DefaultMemberAttribute)
Dim defMem As DefaultMemberAttribute = CType(Attribute.GetCustomAttribute([Assembly].GetAssembly(t), t), DefaultMemberAttribute)
Dim memInfo As MemberInfo() = t.GetMember(defMem.MemberName)
Type t = typeof(DefaultMemberAttribute);
DefaultMemberAttribute defMem = (DefaultMemberAttribute)Attribute.GetCustomAttribute(Assembly.GetAssembly(t), t);
MemberInfo[] memInfo = t.GetMember(defMem.MemberName);
Einfacher ist die Verwendung von Type.GetDefaultMembers, was exakt zum gleichen Ergebnis führt. Allerdings löst GetDefaultMembers eine Ausnahme aus (InvalidOperationException), falls mehr als ein Standardmember für den Typ definiert ist. Im folgenden Codebeispiel wird die Syntax für GetDefaultMembers dargestellt:
Dim memInfo As MemberInfo() = t.GetDefaultMembers()
MemberInfo[] memInfo = t.GetDefaultMembers();
Standardmember können durch Aufrufen von Type.InvokeMember mit String.Empty ("") als Membername aufgerufen werden. InvokeMember ruft DefaultMemberAttribute von dem Typ ab und ruft diesen dann auf.