Возвращение из метода конкретного класса, реализующего интерфейс

Всем привет. Почему не получается в классе i2_c1 реализовать getI с возвращаемым значением конкретного класса? Ведь этот конкретный класс реализует интерфейс, и как я думал, компилятору будет всё равно, что возвращается, главное чтобы интерфейс был реализован. Может быть я делаю что то не так? Вот код:

interface i1
{
    int f();
}

class i1_c1 : i1
{
    public int f() { return 1; }
}

class i1_c2 : i1
{
    public int f() { return 2; }
}

interface i2
{
    i1 getI();
}

class i2_c1 : i2
{
    public i1_c1 getI()
    {
        return new i1_c1();
    }
}

Этот код компилируется с ошибкой: Ошибка CS0738 'i2_c1" не реализует член интерфейса "i2.getI()". 'i2_c1.getI()" не может реализовать "i2.getI()", потому что не имеет соответствующего возвращаемого типа "i1".

UPD.: Объясните, пожалуйста, почему я не могу установить возвращаемый тип как конкретный класс, реализующий интерфейс, который возвращается?


Ответы (1 шт):

Автор решения: Igor
class i2_c1 : i2
{
    public i1 getI()
    {
        return new i1_c1();
    }
}
→ Ссылка