У меня есть следующие классы. Для каждого из классов управления я хотел бы предоставить элемент данных через свойство.C# производные классы и свойства
public class BasicData {}
public class AdvancedData : BasicData { }
public class BasicControl
{
private BasicData data;
public BasicData DataHide;
public virtual BasicData DataOverride;
}
public class AdvancedControl: BasicControl
{
private AdvancedData data;
public new AdvancedData DataHide; //Hide
public override BasicData DataOverride; //Override
}
Если я свойство виртуальной, то мой AdvancedControl
класс должен выставить данные в BasicData
и не AdvancedData
(который я предпочел бы).
Я могу скрыть свойство базового класса, но я прочитал, что, по возможности, следует избегать скрытия.
Я хочу иметь только одно свойство данных для каждого класса управления, и я хочу, чтобы это свойство имело одно и то же имя в каждом классе, то есть Data
. Для BasicControl
это должно быть BasicData
. Для AdvancedControl
это должно быть AdvancedData
.
Каков наилучший способ разработки моих классов для достижения этого?
Не можете ли вы использовать дженерики? 'BasicControl где TData: BasicData'? –
Toxantron
Я бы использовал generics, у которых есть только 'Control, где T: BasicData' и имеют' Data' как 'частные данные T ';'. 'AdvancedControl' тогда будет' class AdvancedControl: Control ' –
http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance –