繁体   English   中英

C# 子类,方法相同

[英]C# Subclass with same method

我有一个有两个子类的超类。 这两个子类都有一个检查章节是否有内容的方法。 对于子类 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;

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

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

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);
    }
}

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

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;
}

你说:

两种方法的目的是一样的

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM