Accesso ai membri predefiniti
Tutti i tipi possono disporre di un membro predefinito, ossia di un membro che viene richiamato quando non si fornisce alcun nome. Nell'esempio che segue viene richiamato il membro predefinito di Class1
e il valore restituito viene assegnato a i
.
Dim i As Integer
Dim c As New Class1()
i = Convert.ToInt32(c)
I membri predefiniti sono contrassegnati da System.Reflection.DefaultMemberAttribute. Nell'esempio che segue viene illustrato come recuperare il membro predefinito recuperandone l'attributo personalizzato.
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);
È possibile che risulti più semplice utilizzare Type.GetDefaultMembers, che produce esattamente lo stesso risultato. Se per il tipo si è definito più di un membro predefinito, GetDefaultMembers genererà una InvalidOperationException. Nell'esempio di codice che segue viene illustrata la sintassi per l'utilizzo di GetDefaultMembers.
Dim memInfo As MemberInfo() = t.GetDefaultMembers()
MemberInfo[] memInfo = t.GetDefaultMembers();
È possibile richiamare un membro predefinito chiamando Type.InvokeMember con String.Empty ("") come nome del membro. InvokeMember recupera DefaultMemberAttribute dal tipo, quindi lo richiama.
Vedere anche
Riferimenti
DefaultMemberAttribute
Type.GetDefaultMembers