Здравствуйте, Serginio1, Вы писали:
S>С точки зрения перегрузки методов так и есть берутся текущие, но ты можешь переопределить в ролях.
S>Если не интерфейс, то что будет выступать контрактом?
Ты, похоже, ничего из написанного мной не понял. Посмотри как в Go реализованы интерфейсы. Там какие-то роли не нужны. Любой объект обладающий набором членов совпадающим с набором членов интерфейса считается реализующим этот интерфейс (утиная типизация). Есть у тебя интерфейс:
interface IFoo
{
void Bar();
}
И есть объект:
class Baz
{
void X() {}
void Bar() {}
}
Объект типа Baz можно передать туда где требуется IFoo, так как Baz реализует все члены IFoo (в данном случае Bar).
Все! Никакие роли не нужны! Если надо добавить реализацию недостающих методов можно пользоваться наследованием. Ну, разве что для запечатанных типов роли нужны для обхода запечатанности.
А тут нужно каждый раз придется писать кучу кода руками. Конечно, лучше чем ничего. Но по сравнению с Go — хуже.