3

我有一个有两个子类的超类。这两个子类都有一个检查章节是否有内容的方法。对于子类 1,此方法是 HasContent(int chapterID),对于子类 2,此方法是 HasContent(int chapterID, int authority)。如您所见,子类 2 有一个额外的参数。两种方法的目的是相同的。

我正在考虑将 HasContent 方法放在超类中。你认为我需要这样做吗?如果是这样,我应该如何实施?还是将这两种方法放在自己的子类中更明智?

编辑:

HasDocuments 的主体如下所示: Subclass1:

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID, mInstitutionID);

if (res > 0)
    return true;
else
    return false;

子类2:

Database DB = new Database();
int res = DB.ExecuteSpRetVal(chapterID);

if (res > 0)
    return true;
else
    return false;
4

4 回答 4

7

编辑:根据问题更新更新。

由于您显然在两种方法中具有几乎相同的逻辑,因此我将对其进行重构:

abstract class SuperClass
{
    protected bool HasContentImpl(int chapterID, int institution)
    {
        Database db = new Database();
        int result;

        if (institution >= 0) // assuming negative numbers are out of range
            result = db.ExecuteSpRetVal(chapterID, institution);
        else
            result = db.ExecuteSpRetVal(chapterID);

        return result > 0;
    }
}

class SubClass1 : SuperClass
{
    public bool HasContent(int chapterID)
    {
        return base.HasContentImpl(chapterID, -1);
    }
}

class SubClass2 : SuperClass
{
    public bool HasContent(int chapterID, int institution)
    {
        return base.HasContentImpl(chapterID, institution);
    }
}
于 2009-03-09T10:35:26.190 回答
2

通过将两个具有不同参数的同名方法放入超类中来使用方法重载。当您调用 HasContent 时,它将使用与您提供的参数的数量和类型匹配的任何一个。因为它在超类中,所以如果您以后决定创建一个也使用此方法的新子类,您现在不必再制作它的另一个副本。请参阅下面的示例代码;

protected bool HasContent(int chapterID, int institution)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID, institution);

    return result > 0;
}

protected bool HasContent(int chapterID)
{
    Database db = new Database();
    int result;

    result = db.ExecuteSpRetVal(chapterID);

    return result > 0;
}
于 2009-07-08T00:48:24.263 回答
0

你说:

两种方法的目的是一样的

所以是的,听起来你有一个可以放在超类中的通用方法。

于 2009-03-09T10:33:38.613 回答
0

由于 HasContent() 采用不同的增强,我不会将其移至基类,两个方法被称为相同的事实并不意味着它们做同样的事情。

我不知道您的代码库或您正在使用的系统是做什么的,但是鉴于我所掌握的信息很少,您的设计有些东西感觉不对。过去我发现,当我遇到这种设计问题时,通常是由于数据模型的其他问题。抱歉,如果您无法更改系统的其余部分,则无法匹配帮助...。

于 2009-03-09T12:34:21.757 回答