【发布时间】:2017-12-27 06:53:31
【问题描述】:
我想了解接口实现,因为我遇到了对我来说没有意义的错误。 我有这个接口和 2 个抽象类:
public interface ICashBuddieHelper
{
IHelper FilterOnContext(DbBuddieContext db);
IHelper PrepareResultModel(InputModelBase message);
IHelper SortSet();
ResultModelBase ToResultModel(InputModelBase message);
}
public abstract class ResultModelBase
{
...
}
public abstract class InputModelBase
{
...
}
我有两个类实现了这个 Helper 接口,但具有更多派生版本的输入参数和返回类型,它们是抽象类,如上所示。 我已经使用以下类实现了 IHelper 接口
public class BankAccountHelper : ICashBuddieHelper
{
public ICashBuddieHelper FilterOnContext(DbBuddieContext db){...}
public ICashBuddieHelper PrepareResultModel(BankAccountInputModel message){...}//error
public ICashBuddieHelper SortSet(){...}
public ResultModelBase ToResultModel(BankAccountInputModel message){...}//error
}
public class CashFlowHelper : ICashBuddieHelper
{
public ICashBuddieHelper FilterOnContext(DbBuddieContext db){...}
public ICashBuddieHelper PrepareResultModel(CashFlowInputModel message){...}//error
public ICashBuddieHelper SortSet(){...}
public ResultModelBase ToResultModel(CashFlowInputModel message){...}//error
}
从上面的代码 sn-p 中,你可以看到实现类中的两行给出的错误是:
“CashFlowHelper”没有实现接口成员“ICashBuddieHelper.PrepareResultModel(InputModelBase)” “CashFlowHelper”没有实现接口成员“ICashBuddieHelper.ToResultModel(InputModelBase)”
请有人告诉我我做错了什么吗?我想了解我对接口的误解。当然,我可以使用更派生的类型来代替抽象类。我不明白编译器在抱怨什么。
【问题讨论】:
-
您在 CashFlowHelper 中缺少
public(在接口方法签名前面)。该界面要求它们是公开的。 -
添加到@john 的答案:如果要隐藏接口成员,请明确说明。例如,
void IMyInterface.DoSomething { }。 -
对不起,约翰,我在 stackoverlow 上添加时不只是添加 public。我现在将其添加到其中。谢谢
-
仅供参考您的代码似乎工作正常。见fiddle。有时当我在实现类等时,我按下
Ctrl+.,然后点击Enter,因为我走得太快,我不小心在本地命名空间中得到了一个与类同名的新类在另一个命名空间中。你有机会做到这一点吗?还是有可能实现和接口引用了两个不同的同名类? -
@JosephIzang 目前状态的问题尚不清楚,因为它不完整,需要太多问题才能澄清所问的问题。阅读How to Ask,然后提供minimal reproducible example,可用于重现您的问题,让我们更好地了解所要求的内容。
标签: c#