1

最近、いくつかのコードを調べnewたところ、基本インターフェイスとまったく同じ名前とシグネチャを持つメソッドを宣言する派生インターフェイスに遭遇しました。

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

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

これには何か理由があるのではないかと考えています。私の理解によれば、後者のメソッド宣言を安全に削除して、IDerivedそれを使用するコードを壊すことなく空のままにすることができます。私が間違っている?

PSこれが問題になる場合、これらのインターフェイス宣言には次の属性もあります:ComVisible(true)InterfaceType(ComInterfaceType.InterfaceIsIUnknown)およびGuid(...)

4

1 に答える 1

5

まあ、あなたはそれを取り除くことができるかもしれませIDerivedん-しかし、あなたがでメソッドを取り除くならば、それは厳密に言えば、実際には同じではありません。実装は、実際には2つの異なるメソッドを提供して、2つのインターフェースメソッドを異なる方法で実装できます。

例えば:

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();
    }
}
于 2013-03-09T14:47:16.160 に答える