Март правильно понял с ключевым словом "новый".
Я на самом деле попал сюда, потому что мне нужен был такой тип функциональности, и решение Март прекрасно работает. Фактически, я взял его лучше и сделал метод базового класса абстрактным, чтобы программист предоставил это поле.
Мой сценарий был следующим:
У меня есть базовый класс HouseDeed. Каждый тип дома, полученный из HouseDeed, должен иметь цену.
Вот частичный базовый класс HouseDeed:
public abstract class HouseDeed : Item
{
public static int m_price = 0;
public abstract int Price { get; }
/* more impl here */
}
Теперь давайте рассмотрим два производных типа домов:
public class FieldStoneHouseDeed : HouseDeed
{
public static new int m_price = 43800;
public override int Price { get { return m_price; } }
/* more impl here */
}
и ...
public class SmallTowerDeed : HouseDeed
{
public static new int m_price = 88500;
public override int Price { get { return m_price; } }
/* more impl here */
}
Как видите, я могу получить доступ к цене дома с помощью типа SmallTowerDeed.m_price и экземпляра new SmallTowerDeed (). Price
И будучи абстрактным, этот механизм вынуждает программиста указывать цену для каждого нового производного типа дома.
Кто-то указал, как «статические виртуальные» и «виртуальные» концептуально расходятся друг с другом. Я не согласен. В этом примере статическим методам не требуется доступ к данным экземпляра, и поэтому выполняются требования, чтобы (1) цена была доступна только через ТИП и (2) была предоставлена цена.