Похоже, вы хотите «принять» метод get
для свойства, чтобы сначала проверить кеш, прежде чем возвращать «фактическое» значение из вашего свойства.Поскольку нет возможности осуществлять перехват свойств на разовой основе, вам придется заранее планировать эту возможность.
Одним из подходов было бы использование интерфейсов и запись ваших классов в интерфейс.Например,
public interface IAll
{
string N { get; set; }
}
Теперь вы можете использовать прокси для создания оболочки вокруг исходного экземпляра All
, который также реализует этот интерфейс.Кроме того, так как вы полностью отвечаете за свойство сейчас, вы можете проверять кеш всякий раз, когда вызывается getter
.Поскольку в вашем распоряжении будет PropertyInfo
/ MethodInfo
, у вас не должно возникнуть проблем при создании уникального ключа для каждого свойства.
Поэтому, когда бы вы ни создавали экземпляр All
, вы такжесоздать экземпляр этого прокси, передав ему экземпляр All
.Все последующие использования этого экземпляра All
должны вместо этого передаваться прокси.Как и любая реализация фабрики классов, для этого необходимо отказаться от использования оператора new .
В качестве альтернативы вы можете использовать виртуальные методы вместо интерфейсов.