2016-07-07 2 views
0

я следующее:Внутренний интерфейс приводит к СУХОЙ нарушения

internal class Person { 
} 

internal interface IGetPerson { 
    Person GetPerson(); 
} 

public class Cat: IGetPerson { 
    private Person _Person = new Person(); 

    Person IGetPerson.GetPerson() { 
    return _Person; 
    } 

    internal Person GetPerson() { // dry violation -- necessary? 
    return _Person; // or return (this as IGetPerson).GetPerson();  
    } 
} 

Это, как представляется, необходимо получить следующие компиляции, без «как» бросок:

internal class SomeClass { 
    public static Person GetPerson(Cat someCat) { 
    return someCat.GetPerson(); 
    } 
} 

Развязка является что, если я что-то не упустил, принятие внутреннего интерфейса неизбежно приведет к нарушению СУЩЕСТВУЮЩЕГО. Альтернативой является публикация класса Person.

Я что-то упустил?

+0

Почему это исправление не должно использоваться «как»? –

+0

В зависимости от варианта использования, возможно. Это просто глупо. –

ответ

0

В этом случае вам фактически не нужны два метода. Просто вытащите «IGetPerson». (включая точку) с первого переопределения, затем выньте второй метод. Если вы используете быстрые действия VS 2015, попробуйте выбрать «Реализовать интерфейс» вместо «Реализовать интерфейс явно».

+0

, который не будет строить. Проблема в том, что GetPerson должен быть общедоступным для реализации интерфейса, но не может быть общедоступным, поскольку Person не является общедоступным. –

+0

Я вижу. Вы можете либо сделать интерфейс статическим классом, чтобы он мог иметь внутренних членов, сделать «человека» общедоступным, сделать Cat внутренним, либо делать то, что вы предложили. В этом случае сухое нарушение не имеет особого значения, поскольку это всего лишь один простой Я бы не стал слишком беспокоиться об этом. – mousetail

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