Ответ 1
Неа. В С# абстрактный класс должен полностью реализовать интерфейс. Обратите внимание, что он может реализовать его с абстрактными методами и абстрактными свойствами. Это одна мелочь о С#, которая всегда меня била.
Могу ли я оставить абстрактный класс, который реализует интерфейсы пустым и подразумевает, что все методы/свойства в интерфейсе являются абстрактными в моем классе. Похоже, что я должен написать их снова в абстрактном классе, но я действительно хочу избежать этого дублирования.
Моя причина в том, что у меня есть пара интерфейсов с различными аксессуарами, одна общедоступная и одна внутренняя, которую я хочу объединить, поэтому у меня есть абстрактный класс, который реализует их, которые могут быть расширены.
public interface ISomePublicProperties {
int PropertyOne {get;}
}
internal interface ISomeInternalProperties {
int PropertyTwo {get;}
}
public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties {}
Но компилятор жалуется, что SomeClass не реализует метод интерфейса ISomePublicProperties.PropertyOne и ISomeInternalProperties.PropertyTwo
Есть ли в С# (я знаю, что Java это позволяет), что я могу оставить абстрактные классы пустым интерфейсом реализации?
Неа. В С# абстрактный класс должен полностью реализовать интерфейс. Обратите внимание, что он может реализовать его с абстрактными методами и абстрактными свойствами. Это одна мелочь о С#, которая всегда меня била.
Единственный способ сделать это - создать свойства virtual
без реализации. Затем они переопределяются в ваших производных классах.
public abstract class SomeClass : ISomePublicProperties, ISomeInternalProperties
{
public abstract int PropertyOne { get; }
internal abstract int PropertyTwo { get; }
}