3

2つのインターフェースが異なるタイプの同じプロパティを持っている場合、それらを実装するクラスをどのように使用できますか。サンプルコード:

internal interface ITest
{
    string WhatEv { get; set; }
}

internal interface ITest2
{
    int WhatEv { get; set; }
}

internal interface ITest3 : ITest, ITest2
{
}

internal class Simple : ITest3
{
    string ITest.WhatEv { get; set; }

    int ITest2.WhatEv { get; set; }
}

internal class Program
{
    public static void Main(string[] args)
    {
        ITest3 foo = new Simple();
        foo.WhatEv = "asdf";
    }
}

あいまいな参照エラーのスクリーンショット:

VSのエラー

4

2 に答える 2

6

またはにキャストfooします。ITestITest2

ITest3 foo = new Simple();
((ITest)foo).WhatEv = "asdf";
于 2013-03-15T02:43:45.240 に答える
1

とても簡単です。これらは同じ名前であり、同じパラメーターを持っているため、コンパイラーが2つを区別する方法はありません。同じパラメータを持つ2つの関数を持つのと同じですが、intまたはstringを返します。

int WhatEva(string hello)
{
    return 0;
}

string WhatEva(string hello)
{
    return "0";
}

これにより、同様のエラーメッセージが表示されます- Already defines a member called 'WhatEva' with the same parameter types。コンパイラには2つを区別する方法がないためです。

このため、2つを区別する方法をコンパイラに提供する必要があります。この場合、先制的ににキャストする必要がありWhatEvますITest

于 2013-03-15T02:43:58.990 に答える