2009-08-24 23 views

Respuesta

20

Así es como funciona. static miembros son realmente cosas no orientadas a objetos. No son polimórficos y pertenecen realmente a su tipo de declaración y no están relacionados con otros tipos en la jerarquía de herencia. Por ejemplo, no es necesario ejecutar un inicializador estático para una clase base antes de acceder a un miembro estático en una clase derivada.

static miembros de las clases base no se devuelven menos que se especifique BindingFlags.FlattenHierarchy:

type.GetFields(BindingFlags.Static 
      | BindingFlags.FlattenHierarchy 
      | BindingFlags.Public) 
+0

Debe tenerse en cuenta que esto todavía no encontrará * estática * privada * en una clase base. En caso de que eso sea lo que OP intenta hacer. – womp

+0

Sí, eso fue solo un ejemplo. Solo agrega 'BindingFlags.NonPublic' en caso de que lo necesites. –

+2

Eso todavía no lo hará en realidad. Debe reflejar en campos estáticos privados directamente en la clase base. Aunque espero que OP no intente hacer eso;) – womp

6

Porque pertenecen al tipo base y no se heredan. Muévase hasta ese tipo, y los encontrará.

- Editar

Mehrdad tiene la respuesta correcta, pero simplemente para la corrección:

foreach(FieldInfo f in b.GetType().GetFields(
    BindingFlags.Static 
    | BindingFlags.FlattenHierarchy 
    | BindingFlags.Instance 
    | BindingFlags.Public 
    )){ 
    Console.WriteLine("found: " + f.Name); 
} 
3

Su tipo es sólo su tipo - que no incluye los tipos base. Tendrá que usar BindingFlags.FlattenHierarchy si desea buscar campos en clases base.

Probablemente deberías echarle un vistazo al BindingFlags documentation para lograr lo que necesitas.

Cuestiones relacionadas