我的BLL中的每个班级都有以下功能:
private void FillList()
{
MyDataSet.MyDataTable dt = MyTableAdapter.GetList();
foreach (MyDataSet.MyDataRow row in dt)
{
this.List.Add(new MyClass(row));
}
}
MyDataSet对于所有类都是相同的。
MyTableAdapter,MyDataTable,MyDataRow,MyClass - 每个班级都会发生变化。
但是,它看起来像是在复制代码。
如何使FillList成为一个抽象函数并由每个类继承它?
谢谢。
答案 0 :(得分:0)
如果要创建abstract
方法,则必须更改其可见性,因为必须在具体类(子项)中实现抽象方法。因此,儿童必须能够使用这种方法。
这是父类中的conde(总是抽象的):
abstract class Parent
{
protected abstract void FillList();
}
以下是achild类(实现)的代码示例
class Child:Parent
{
protected override void FillList()
{
MyDataSet.MyDataTable dt = MyTableAdapter.GetList();
foreach (MyDataSet.MyDataRow row in dt)
{
this.List.Add(new MyClass(row));
}
}
}
正如你在这里看到的那样,抽象方法更像是一个合同,确保孩子们必须实现它。 (请注意,您可以将interfaces用于此目的。)
更有用的解决方案,是为MyDataTable
(全部实施GetList
),MyDataRow ...创建共同父母,并拆分方法
class Parent
{
protected void FillList()
{
MyDataSet.MyParentDataTable dt = MyParentTableAdapter.GetList();
foreach (MyDataSet.MyParentDataRow row in dt)
{
this.List.Add(getMyClass(row));
}
}
protected abstract MyParentClass getNewMyClass(MyDataSet.MyParentDataRow row);
}
class Child:Parent
{
protected override MyParentClass getNewMyClass(MyDataSet.MyParentDataRow row)
{
return new MyClass(row)
}
}
最后一个例子快速而且很脏:你必须从孩子那里获取List,你应该考虑使用泛型,但是它可以让你知道什么是可能的。