如果要创建abstract
方法,则必须更改其可见性,因为抽象方法必须在具体类(子类)中实现。因此,孩子们必须有权使用此方法。
这是父类中的 conde(总是抽象的):
abstract class Parent
{
protected abstract void FillList();
}
这是一个子类的代码示例(实现)
class Child:Parent
{
protected override void FillList()
{
MyDataSet.MyDataTable dt = MyTableAdapter.GetList();
foreach (MyDataSet.MyDataRow row in dt)
{
this.List.Add(new MyClass(row));
}
}
}
正如您在此处看到的,抽象方法更像是一种合同,确保孩子们必须实现它。(请注意,您可以为此目的使用接口。)
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)
}
}
最后一个例子变得又快又脏:你必须列出可以从孩子那里访问的列表,如果可以的话,你应该考虑使用泛型,但它可以让你了解什么是可能的。