2013-12-02 1 views
1

Как я могу получить доступ к I1 и I2 интерфейсы методы через I3 интерфейс. Я хочу реализовать I3 в классе TestIt (открытый класс TestIt: I3). Не хотите реализовывать I1 и I2 (открытый класс TestIt: I1, I2).интерфейс проблема реализации, когда вызов функции из perticular интерфейса

Мой код ниже ...

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

/// <summary> 
/// Summary description for TestIt 
/// </summary> 
public class TestIt:I3 
{ 
    public TestIt() 
    { 
     // 
     // TODO: Add constructor logic here 
     // 
     //TestItB tb = new TestItB(); 
    } 

    public int abc() 
    { 
     return 10; 
    } 

    int I1.A1() 
    { 
     return 20; 
    } 

    void I2.A1() 
    { 
     int j = 0; 
    } 
} 

public interface I1 
{ 
    int A1(); 
} 

public interface I2 
{ 
    void A1(); 
} 

public interface I3 : I1, I2 
{ 

} 

И я пытаюсь вызвать метод A1, как показано ниже ...

I3 t = new TestIt(); 
int i = t.A1(); 

выше броска ошибка ...

I не хотят создавать объект как удар ...

I1 t = new TestIT(); 
    or 
I2 t = new TestIT(); 
+0

** Что ** ошибка? Сообщение об исключении. –

+0

не знает, какой из них назвать, поскольку A1 выполняется дважды. Вам нужно будет изменить типы параметров на A1, чтобы дифференцировать методы интерфейса. – ps2goat

+0

Ошибка: вызов неоднозначен между следующими методами или свойствами: «I1.A1()» и «I2.A1()» –

ответ

2

закиньте объект соответствующего типа интерфейса:

int i = ((I1)t).A1(); 

Вы также можете сделать с с оператором as с (t as I1).A1(), хотя отливка ИМО дает более четкое представление о том, что происходит.

+0

Но я не могу назвать метод A1 прямым вызовом (без кастования какого-либо типа)? –

+0

не могли бы вы дать мне ответ на мой вышеупомянутый вопрос ....? –

+0

@VishalPatel: Нет, потому что 'TestIt' явно реализует' I1.A1'. См. Http://msdn.microsoft.com/en-us/library/ms173157.aspx – Jon

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