Как я могу получить все подкласс в классе, используя отражение в C # [дубликат]

http://docs.oracle.com/javase/tutorial/java/annotations/repeating.html

Начиная с Java8 вы можете описать повторяемые аннотации:

  @Repeatable (FooValues.class) public @interface Foo {String bar ();  } public @interface FooValues ​​{Foo [] value ();  }  

Примечание, значение является обязательным для списка значений.

Теперь вы можете использовать аннотации, повторяя их вместо заполнения массива: [ ! d7]

  @Foo (bar = "one") @Foo (bar = "two") public void haha ​​() {}  

16
задан Thomas King 6 April 2011 в 13:34
поделиться

5 ответов

Вы хотите Type.GetNestedTypes . Это даст вам список типов, которые вы можете запросить для своих имен.

32
ответ дан Chris Pitman 16 August 2018 в 14:37
поделиться

Да, есть. Используйте Type.GetNestedTypes() .

2
ответ дан Daniel Hilgarth 16 August 2018 в 14:37
поделиться
Type[] nested = typeof(SomeClass).GetNestedTypes();
2
ответ дан Danny Chen 16 August 2018 в 14:37
поделиться

Type.GetNestedTypes () вернет общедоступные вложенные типы указанного типа.

Если вам также нужны частные и внутренние вложенные типы, вы должны вызвать Type.GetNestedTypes (BindingFlags bindingFlags) метод, подобный этому:

Type[] nestedTypes = typeof(MyType).GetNestedTypes(BindingFlags.Static |
                                                   BindingFlags.Instance |
                                                   BindingFlags.Public |
                                                   BindingFlags.NonPublic);
2
ответ дан Jeff Cyr 16 August 2018 в 14:37
поделиться

Не делает ли Type.GetNestedTypes то, что вы хотите?

Обратите внимание, что если вы хотите получить «двойные вложенные» типы, вам нужно будет перезаписать - как Foo.Bar.Baz - это вложенный тип в Foo.Bar, а не в Foo.

Для «современных» сред (.NET 4.5, PCL, UWA и т. Д.) Вам нужно TypeInfo.DeclaredNestedTypes , например, type.GetTypeInfo().DeclaredNestedTypes, используя метод расширения GetTypeInfo() .

8
ответ дан Jon Skeet 16 August 2018 в 14:37
поделиться
  • 1
    Кажется, что в Windows 8.1 нет «GetNestedTypes», метод. Какие-либо предложения? Спасибо. – superpuccio 22 September 2015 в 16:53
  • 2
    @superpuccio: Как и во многих случаях в современном отражении, вы хотите TypeInfo - в этом случае TypeInfo.DeclaredNestedTypes. – Jon Skeet 22 September 2015 в 17:12
  • 3
    Как и в typeof(T).GetTypeInfo().DeclaredNestedTypes. – ErikE 20 November 2015 в 18:48
  • 4
    @ErikE: Правильно разъяснено. – Jon Skeet 20 November 2015 в 18:49
Другие вопросы по тегам:

Похожие вопросы: