Acceso a miembros predeterminados

Actualización: noviembre 2007

Todos los tipos pueden tener un miembro predeterminado, siendo éste el miembro que se invoca cuando no se especifica ningún nombre de miembro. En el ejemplo siguiente, se invoca el miembro predeterminado de Class1, y el valor que devuelve se asigna a i.

Dim i As Integer
Dim c As New Class1()
i = Convert.ToInt32(c)

Los miembros predeterminados se marcan con System.Reflection.DefaultMemberAttribute. En el ejemplo siguiente, se muestra cómo recuperar el miembro predeterminado recuperando el atributo personalizado.

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);

Quizás sea más sencillo utilizar Type.GetDefaultMembers, que genera exactamente el mismo resultado. Sin embargo, GetDefaultMembers inicia una excepción InvalidOperationException si hay más de un miembro predeterminado definido en el tipo. En el siguiente ejemplo de código se muestra la sintaxis de GetDefaultMembers.

Dim memInfo As MemberInfo() = t.GetDefaultMembers()
MemberInfo[] memInfo = t.GetDefaultMembers();

Puede invocar los miembros predeterminados mediante una llamada a Type.InvokeMember con String.Empty ("") como nombre de miembro. InvokeMember recupera el atributo DefaultMemberAttribute del tipo y, a continuación, lo invoca.

Vea también

Conceptos

Ver información de tipos

Referencia

DefaultMemberAttribute

Type.GetDefaultMembers