【问题标题】:Does implementing Interface both implicit and explicit make sense?实现接口隐式和显式是否有意义?
【发布时间】:2012-04-27 06:16:57
【问题描述】:

我目前正在准备 MS 70-515 考试。在其中一种实践中,作者实现了一个隐式和显式的接口。显式实现只是调用隐式实现。显式实现只是列出来,没有解释。

同时拥有接口的隐式和显式实现是否有意义?我认为显式实现是多余的(在这种情况下)。

public class PassTextBox : TextBox, IScriptControl
{
    public virtual IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    {
        var descriptor = new ScriptControlDescriptor(
            "AjaxEnabled.PassTextBox", ClientID);
        // ...
        return new ScriptDescriptor[] {descriptor};
    }

    IEnumerable<ScriptDescriptor> IScriptControl.GetScriptDescriptors()
    {
        return GetScriptDescriptors();
    }
}

顺便说一句,代码似乎在没有显式实现的情况下运行得很好,因为隐式实现是公开的。

准确地说是MCTS Self-Paced Training Kit (Exam 70-515): Web Applications Development with Microsoft .NET Framework 4 第 9 章第 2 课,练习 3。

【问题讨论】:

标签: c# interface implicit explicit


【解决方案1】:

显式实现似乎完全是多余的。

我想不出一种方法来称呼它,如果你忽略它会有所作为。

有一个小区别,隐式版本是虚拟的,这意味着它可以被覆盖。显式版本将始终在此入口点调用。但是因为它只调用虚拟成员,所以这里没有使用差异。

【讨论】:

  • Marc Gravell says 实现两者的一个原因可能是非显式方法是virtualabstract,用于override 的子类。在我的示例中,它确实是virtual,但我不明白为什么这也是实现显式接口的原因。我会通过评论 Marc 的回答来问他的意思。
  • 你可以有 2 种完全不同的实现。但这是否可取?并且当利用它时,将实现显式放置并让虚拟方法调用它会更有意义。
  • @Henk:如果虚拟版本将在派生类中被覆盖,并且该类的实例将通过接口变量调用,将调用哪个版本?是否会调用第一类中的显式版本?以及将执行哪个版本的隐式实现?初始版本还是被覆盖的版本?
  • 当您通过接口 var 调用时,它总是会转到显式实现。使用对象 var(基类或派生类)总是隐含的。
猜你喜欢
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多