C # Чтение атрибутов из общего класса без экземпляра - PullRequest
0 голосов
/ 16 декабря 2018

Описание проблемы

Я пытаюсь реализовать очень специфический вид кэша объектов, который я не могу создать непосредственно (например, частные конструкторы)

Что я хочуdo читает некоторую информацию о конкретном классе, предпочтительно через некоторый интерфейс (который, к сожалению, не поддерживает статические методы, определенные для каждого подкласса)

Другими словами:

public class Data
{
     public static bool Attribute1() => False;
     private Data(...) { ... }
}

public class Cache<T> // T is for instance Data
{
     void SomeMethod() 
     {
          bool Value = T.Attribute1()
          ...
     }
}

Этохорошо, если я могу заставить T наследовать от некоторого базового класса или некоторого интерфейса, и получить атрибут через какой-то метод или напрямую.Однако очень важно, чтобы я мог

  • Запрограммировать несколько классов данных A и B, где A.Attribute1 () отличается от B.Attribute1 ()
  • Получить атрибут изтип класса данных без создания экземпляра типа данных

Текущее решение

В настоящее время у меня есть решение в форме реестра, созданного при инициализации статических объектов, например:

class CacheAttributesRegistry
{
    static RegisterAttributes(Type T, bool Attribute1, ...) { ... }
}  

class Data 
{
    static Data() { RegisterAttributes(typeof(Data), true, ...); }
}

class Cache<T>
{
    void SomeMethod()
    {
        bool Value = CacheAttributesRegistry.Attribute1(typeof(T));
    }
}

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

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

Не хватает некоторыхвариант или я только что достиг языковых ограничений?

...