Интерфейс C #, реализованный пустым абстрактным классом - PullRequest
11 голосов
/ 31 марта 2011

Могу ли я оставить абстрактный класс, который реализует интерфейсы, пустым и подразумевать, что все методы / свойства в интерфейсе являются абстрактными в моем классе.Похоже, что мне нужно снова записать их в абстрактный класс, но я действительно хочу избежать этого дублирования.

Моя причина в том, что у меня есть пара интерфейсов с разными средствами доступа, один общедоступный и один внутренний, что яхочу собрать вместе, поэтому у меня есть абстрактный класс, который реализует их оба, которые затем могут быть расширены.

public interface ISomePublicProperties {
    int PropertyOne {get;}
}

internal interface ISomeInternalProperties {
    int PropertyTwo {get;}
}

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {}

Но компилятор жалуется, что SomeClass не реализует метод интерфейса ISomePublicProperties.PropertyOne и ISomeInternalProperties.PropertyTwo

Есть ли в C # (я знаю, что Java это позволяет), что я могу оставить абстрактный класс пустым, реализуя интерфейсы?

Ответы [ 2 ]

15 голосов
/ 31 марта 2011

Неа. В C # абстрактный класс должен полностью реализовывать интерфейс. Обратите внимание, что может реализовать его с помощью абстрактных методов и абстрактных свойств. Это одна маленькая вещь в C #, которая всегда меня беспокоила.

3 голосов
/ 31 марта 2011

Единственный способ сделать это - создать virtual свойства без реализации. Затем они переопределяются в ваших производных классах.

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties 
{
    public abstract int PropertyOne { get; }
    internal abstract int PropertyTwo { get; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...