Re[62]: MS забило на дотнет. Питону - да, сишарпу - нет?
От: vdimas Россия  
Дата: 09.09.21 19:47
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

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

S>Ну, либо правила определения того, что можно, а что нельзя, становятся чрезмерно сложными.

У value-типов исключили VMT, отсюда остальные правила выводятся автоматически, даже в случае разрешения наследования структур.
Например, по ссылке на value-тип волей-неволей придётся считать, что это точный тип.

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

Во время боксирования в куче тоже создаётся объект с типом ссылки и копируется тело известной структуры, а не неизвестного наследника.

Насчёт разруливания интерфейсов в боксированных значениях — там пока мест не видно никаких сложностей, можно брать готовый механизм из классов (а другого и не будет для боксированных значений).

Брать надо тот механизм где метод, реализующий интерфейс, не объявлен виртуальным (как оно происходит в случае структур).
Тогда одноимённый метод в классе-наследнике рассматривается уже как new, т.е. не переопределяет интерфейсный метод базового класса.

Чтобы в наследнике переопределить нужный метод интерфейса, надо наследнику опять указать в списке баз интерфейс и тогда уже переопределить интерфейсный метод одним из доступных способов:
interface I {
    void Foo();
    void Bar();
}

class Base : I {
    public void Foo() {}
    public void Bar() { }
}

class Derived : Base, I {
    void I.Foo() {}
}

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

Т.е. я понимаю, что ловушкой тут может быть недопонимание разработчиками происходящего, когда они подадут наследника по ссылке, а будут вызываться методы базового класса.
Но не готов судить, какая чаша весов перевесит, если на другой чаше лежит возможность наследовать структуры, т.е. откроет возможность для более агрессивного проектирования в стиле value-type...
Отредактировано 09.09.2021 19:56 vdimas . Предыдущая версия . Еще …
Отредактировано 09.09.2021 19:52 vdimas . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.