[英]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.