3

如果两个接口具有不同类型的相同属性,我如何使用实现它们的类。示例代码:

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

您投射fooITestITest2

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

这很简单。因为它们的名称相同,并且具有相同的参数,所以编译器无法区分两者。这与拥有两个具有相同参数的函数相同,但返回一个 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。由于编译器无法区分两者。

因此,您需要为编译器提供一种区分两者的方法。在这种情况下,您需要抢先WhatEv转换为ITest.

于 2013-03-15T02:43:58.990 回答