Programming
Perfect code
.NET
C#
Comments 6
+1

В чем отличие от абстрактных классов, кроме множественного наследования?

-1
Только публичные методы
Нет конструктора
Нет статичных методов
экземплярные поля использовать по-прежнему нельзя.
+2
В этом C# интерфейсы и расходятся с концепцией миксинов (насколько я их понимаю, миксины концептуально могут хранить состояние), но мы все ещё можем достичь изначальной цели

Вот это если что компилируется и работает:


using System;

interface IFoo
{
    protected class TraitState
    {
        public int Bar {get;set;}
        public int Bar2 {get;set;}
    }
    protected TraitState State {get;}
    public int Wat() => State.Bar + State.Bar2;
}

public class C : IFoo 
{
    IFoo.TraitState IFoo.State {get;} = new IFoo.TraitState();
}

Свойство State при этом недоступно потребителям интерфейса, а доступно только реализующим его классам.

+1
Я нахожу такую имплементацию более чистой и удобной для чтения (и поддержки).

А для тестирования юнит-тестами?
0

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

Only those users with full accounts are able to leave comments., please.