Проблема в том, что виртуальный метод LoadProperty никогда не запускается
Я предполагаю, что ваши вызовы LoadProperty относятся к конкретному типу (ваш newValue
передается как фактический тип, а не как object
тип).
Виртуальный неуниверсальный LoadProperty менее специфичен для типа, чем универсальный LoadProperty, потому что типы параметров IPropertyInfo
и object
. Этот метод существует в тех случаях, когда тип данных значения не может быть определен до времени выполнения.
Поэтому, если вы не передаете newValue
как тип object
, вместо него будет вызван LoadProperty<P>(PropertyInfo<P> propertyInfo, P newValue)
.
но только один является виртуальным
Поскольку метод, который вы на самом деле хотите переопределить, не является виртуальным, вам придется обойти это.
Я бы создал свой собственный метод с другим именем, который выполняет маскирование, а затем вызвал бы базовый метод LoadProperty. Но если вы действительно хотите «переопределить» LoadProperty, вы можете использовать new
, чтобы скрыть базовый метод в качестве альтернативы:
protected new void LoadProperty<P>(PropertyInfo<P> propertyInfo, P newValue)
{
//Do masking
newValue = DoMask(newValue, maskAttribute);
base.LoadProperty(propertyInfo, newValue);
}
Обратитесь к этому ответу , чтобы увидеть последствия сокрытия вместо переопределения, которое может быть или не быть проблемой для вас.