Параметр типа в базовом классе существует только в базовом классе. Более производный класс должен определить новый параметр типа и направить через тип к параметру типа базового класса. Это дает вам место для более общих ограничений c.
Например:
class HUDInfo<THudInfoData> : A_GUI_Info<THudInfoData> where THudInfoData : A_Info_Data
Теперь HUDInfo<>
может занять любое HudInfoData
, если оно получается из A_Info_Data
(или если равно A_Info_Data
). Если вы хотите иметь HUDExtremelySpecificInfo
, который может принимать только HUDExtremelySpecificInfoData
, это будет выглядеть так:
class HUDExtremelySpecificInfo<THudInfoData> : A_GUI_Info<THudInfoData>
where THudInfoData : HUDExtremelySpecificInfoData
Если вы никогда не хотите указывать тип, потому что вы знаете, что он всегда будет HUDExtremelySpecificInfoData
, Вы также можете объявить либо:
class HUDExtremelySpecificInfo<THudInfoData> : A_GUI_Info<THudInfoData>
where THudInfoData : HUDExtremelySpecificInfoData { .. }
class HUDExtremelySpecificInfo : HUDExtremelySpecificInfo<HUDExtremelySpecificInfoData> { .. }
(где вы реализуете non-generi c HUDExtremelySpecificInfo
в терминах generi c HUDExtremelySpecificInfo<>
, и можете использовать generi c один, если есть специфицированный c, еще более чрезвычайно специфичный c информационный подкласс данных, который вы хотите указать)
или только один:
class HUDExtremelySpecificInfo : A_GUI_Info<HUDExtremelySpecificInfoData> { .. }