Подтвердить что ты не робот

Интерфейс С#, реализованный пустым абстрактным классом

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

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

public interface ISomePublicProperties {
    int PropertyOne {get;}
}

internal interface ISomeInternalProperties {
    int PropertyTwo {get;}
}

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {}

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties 
{
    public abstract int PropertyOne { get; }
    internal abstract int PropertyTwo { get; }
}