2013-03-15 4 views
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"; 
    } 
} 

Скриншот неоднозначного эталонным ошибки:

Error In VS

ответ

6

Вы бросили foo либо ITest или ITest2.

ITest3 foo = new Simple(); 
((ITest)foo).WhatEv = "asdf"; 
+0

Работает как очарование. Благодарю. – basarat

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.

Смежные вопросы