Нет, вы не можете делать это так ... даже если вы вставляете интерфейс, вы не можете указать, что метод экземпляра должен быть статическим, а затем вызывать его через T
.Вам бы пришлось использовать отражение, в основном ... и я думаю, что это намного страшнее, чем явное указание предела комнаты.Вы можете прочитать мое предложение о статических интерфейсах , чтобы узнать больше об этом.
По сути, ваши две BasicLimit
константы не имеют отношения к компилятору.
Поскольку вы уже создаете экземпляры комнат, вы можете иметь интерфейс:
public interface IRoomType
{
double BasicLimit { get; }
}
, а затем передать экземпляр комнаты в метод и попросить его:получить предел таким образом.Это уродливо, потому что он использует элемент экземпляра, чтобы получить значение, которое на самом деле не является специфическим для какого-либо конкретного экземпляра, но это так.
Если вы собираетесь использовать отражение, вы можете захотеть указать ограничение в атрибуте вместо константы:
[BasicLimit(100)]
public class RNB { ... }
Тогда вы можете хотя бы спросить тип T
для BasicLimitAttribute
, примененного к нему, если таковой имеется.У вас не было бы безопасности во время компиляции, что атрибут существовал , но вы имели бы защиту от опечаток, таких как создание одной константы BascLimit
вместо BasicLimit
.