1

我的 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 成为一个抽象函数并由每个类继承?

谢谢你。

4

1 回答 1

0

如果要创建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)
    }

}

最后一个例子变得又快又脏:你必须列出可以从孩子那里访问的列表,如果可以的话,你应该考虑使用泛型,但它可以让你了解什么是可能的。

于 2013-06-06T17:30:03.453 回答