Это вопрос дизайна. У меня есть бизнес-объект и 5 типов бизнес-объектов, которые получены из него.Решение проблемы отсутствия ковариации с дженериками в C# 2.0 (BindingList)
У меня также будет класс, в котором есть BindingList. У меня будет 5 классов, полученных из него.
Поскольку ковариация здесь не работает, как бы вы структурировали проект, чтобы свести к минимуму повторение кода? Я мог бы, конечно, вытащить BindingList и пойти с DataTable, и в этом случае проблема будет устранена.
Но так как все бредят о BindingList, я бы ЛЮБЛЮ, чтобы увидеть, как вы, ребята, подходите к этому.
РАСТВОР (на основе ответа Павла Минаева):
public class SampleBase
{
protected string m_seq;
protected string m_id;
protected string m_weight;
protected string m_units;
public SampleBase(string seq, string id, string weight, string units)
{
Seq = seq;
Id = id;
Weight = weight;
Units = units;
}
public SampleBase() { }
public string Seq
{
get { return m_seq; }
set { m_seq = value; }
}
public string Id
{
get { return m_id; }
set { m_id = value; }
}
public string Weight
{
get { return m_weight; }
set { m_weight = value; }
}
public string Units
{
get { return m_units; }
set { m_units = value; }
}
}
public class FwdSample : SampleBase
{
protected string m_std_id;
public FwdSample() { }
public FwdSample (string seq, string id, string weight, string units, string std_id) : base(seq, id, weight, units)
{
StdId = std_id;
}
public string StdId
{
get { return m_std_id; }
set { m_std_id = value; }
}
}
//End of Sample Classes
public abstract class RunBase<T> where T : SampleBase , new()
{
protected BindingList<T> m_samples;
public RunBase() {}
public void Add(T sample)
{
m_samples.Add(sample);
}
public void Update(int index, T sample)
{
m_samples[index] = sample;
}
public void Delete(int index)
{
m_samples.RemoveAt(index);
}
public BindingList<T> Samples
{
get { return m_samples; }
}
}
public class FwdRun : RunBase<FwdSample>
{
public FwdRun()
{
m_samples = new BindingList<FwdSample>();
}
}
Если клиенты вашего класса только быть в состоянии получить элементы от 'BindingList', или добавлять новые элементы к нему, а? –
Как добавить, так и получить – sarsnake
Не забудьте отметить ответ, если вы получите удовлетворительный ответ. – kevindaub