Это скрытие члена.
Полиморфизм означает изменение метода, реализацию свойства в некотором подклассе, скажем, «производный» или «унаследованный» класс. Но, во всяком случае, его подпись неизменна.
C # предоставляет хороший способ скрыть участников: ключевое слово "new".
Вам просто нужно поставить "new" перед модификатором доступа в производном классе, и вы его получили. Если вы этого не сделаете, компилятор C # предложит вам сделать это.
Кстати, если ваша цель - использовать полиморфизм, вы должны учитывать дженерики.
Ваш базовый класс должен иметь универсальный параметр "TPriceValue", и он будет выглядеть следующим образом:
public class Product<TPriceValue>
{
public virtual int Id { get; set; }
public virtual TPriceValue PriceList { get; set; }
public Product()
{
// NOTE/EDIT: You wouldn't initialize "PriceList" here...
}
}
Итак, если вы хотите, чтобы значение вашей цены было десятичным, вам следует создать экземпляр класса следующим образом:
new Product<decimal>();
Или, если вы хотите, чтобы ваше значение в качестве другого словаря:
new Product<IDictionary<PriceType, decimal>>();
Если я не ошибаюсь, это путь в вашем случае;)
РЕДАКТИРОВАТЬ: Извините, я забыл что-то изменить в вашем базовом классе, проверьте еще раз этот ответ:)