派生接口中的新方法声明

时间:2013-03-09 14:41:32

标签: c# .net com-interop

我最近研究了一些代码并遇到了一个派生接口,它声明了new方法,其名称和签名与基本接口完全相同:

public interface IBase
{
    Result Process(Settings settings);
}

public interface IDerived : IBase
{
    new Result Process(Settings settings);
}

我想知道是否有理由这样做。根据我的理解,我可以安全地删除后一个方法声明并保持IDerived为空,而不会破坏使用它的任何代码。我错了吗?

P.S。如果这很重要,这些接口声明还具有以下属性:ComVisible(true)InterfaceType(ComInterfaceType.InterfaceIsIUnknown)Guid(...)

1 个答案:

答案 0 :(得分:5)

好吧,你可以能够摆脱它 - 但如果你摆脱IDerived中的方法,严格来说它实际上并不相同。实现实际上可以提供两种不同的方法来实现两种不同的接口方法。

例如:

using System;

public interface IBase
{
    void Process();
}

public interface IDerived : IBase
{
    new void Process();
}

public class FunkyImpl : IDerived
{
    void IBase.Process()
    {
        Console.WriteLine("IBase.Process");
    }

    void IDerived.Process()
    {
        Console.WriteLine("IDerived.Process");
    }
}

class Test
{
    static void Main()
    {
        var funky = new FunkyImpl();
        IBase b = funky;
        IDerived d = funky;
        b.Process();
        d.Process();
    }
}