【发布时间】:2013-06-20 16:11:23
【问题描述】:
我正在研究一个需要根据我传入的对象类型运行不同处理方法的类。我认为重载可能在这里起作用,但我有一个问题。假设我有两个接口:
public interface IEmail
{
Some properties ...
}
和
public interface ISpecialEmail : IEmail
{
Some more properties....
}
以及处理这些对象的类:
public class EmailProcessor
{
public void ProcessEmail (IEmail email)
{
do stuff;
}
public void ProcessEmail (ISpecialEmail email)
{
do different stuff
}
}
我的问题是,由于 ISpecialEmail 继承自 IEmail,这些方法签名是否足够不同以允许重载?我最初的想法是 ISpecialEmail 电子邮件也会触发 IEmail 签名,因为从技术上讲,该接口也已实现。
感谢您的帮助。
【问题讨论】:
-
如果它编译,那么它应该可以正常工作。编译器/运行时不可能让单个方法调用同时运行两个单独的函数
-
您为什么不尝试编译程序并实际看看会发生什么。您已经拥有了测试它所需的大部分代码。为什么在发布之前不尝试一下?
-
@musefan 请注意,这不仅仅是一个是否存在歧义的问题,而是将选择哪个重载的问题。您确实需要做更多工作才能看到它编译的if,您需要确定编译器认为哪个重载是“最好的”。也就是说,这仍然是一件简单的事情。它只是意味着您需要在编译后运行一次。
-
@Servy:是的,在发布后我只是想到了一篇我不久前读过的“优先”文章。我想这会有话要说
-
我知道它会正确编译,我只是不确定是否有人知道它是否会选择正确的方法。不幸的是,这是 Web 服务的一部分,在测试它之前我还有很长的路要走。不过感谢 cmets。
标签: c# interface overloading