C#: доступ к наследованным частным членам экземпляра посредством отражения

Мне удалось решить эту проблему, обновив файл tsconfig.app.json , добавив в него свойство files и указав app/app.module.ts в массиве.

17
задан Odrade 26 March 2009 в 16:22
поделиться

4 ответа

Как Lee заявил, можно сделать это с рекурсией.

private static void FindFields(ICollection<FieldInfo> fields, Type t) {
    var flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;

    foreach (var field in t.GetFields(flags)) {
        // Ignore inherited fields.
        if (field.DeclaringType == t)
            fields.Add(field);
    }

    var baseType = t.BaseType;
    if (baseType != null)
        FindFields(fields, baseType);
}

public static void Main() {
    var fields = new Collection<FieldInfo>();
    FindFields(fields, typeof(B));
    foreach (FieldInfo fi in fields)
        Console.WriteLine(fi.DeclaringType.Name + " - " + fi.Name);
}
14
ответ дан 30 November 2019 в 14:06
поделиться

Я не попробовал его, но необходимо смочь получить доступ к членам парламента, не занимающим официального поста базового типа через Тип. Свойство BaseType и рекурсивно накапливает все частные поля через иерархию наследования.

4
ответ дан 30 November 2019 в 14:06
поделиться

Вы не можете получить доступ к частным полям A использование типа B потому что те поля не существуют в B - они только существуют в A. Любой необходимо указать тип A непосредственно, или получите его через другие средства (такие как получение базового класса от типа B).

0
ответ дан 30 November 2019 в 14:06
поделиться

Вы можете получить доступ к закрытым членам класса A из класса B с помощью «вложенных классов» . Вы делаете класс A внешним классом, а класс B внутренним классом

Class A
{
 ...
 Class B
 {
.......
  }

}
-1
ответ дан 30 November 2019 в 14:06
поделиться
Другие вопросы по тегам:

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