Получить свойства производного класса в базовом статическом методе - RIDDLE! :) - PullRequest
0 голосов
/ 15 мая 2011

Я хотел бы уточнить текущий проект, над которым я работаю, но это будет довольно долго. Вместо этого я просто опубликую загадку программирования, которая в основном объясняет, что я пытаюсь достичь. :)

abstract class A
{
    // key = Derived Class name, value = list of properties the derive class exposes.
    private static Dictionary<string, List<string>> _DerivedPropertyNames;

    static A()
    {
        InitializeDerivedPropertyNames();
    }

    private static void InitializeDerivedPropertyNames()
    {
        //...???...
    }
}

Загадка в том, как создать абстрактный базовый класс, в котором будет храниться статический кеш всех свойств его производных классов?

Обратите внимание, что идея состоит в том, чтобы не загружать сборку по имени.

Ответы [ 2 ]

1 голос
/ 15 мая 2011

Нет простого (эффективного) способа сделать это в базовом классе.
Просто реализуйте статический конструктор в каждом производном классе и используйте его для регистрации свойств.

Также для сравнения взгляните на свойства зависимостей в WPF Fx.

0 голосов
/ 15 мая 2011

Если вы можете дождаться экземпляров экземпляров дочерних типов, вы можете использовать обычный конструктор А для регистрации реализующего класса:

public A()
{
    Type childType = GetType();
    string className = childType.Name;
    if (!_DerivedPropertyNames.ContainsKey(className)) {
         // add properties for this class
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...