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

Почему я не могу использовать интерфейс с явным оператором?

Мне просто интересно, знает ли кто-нибудь, почему вам не разрешено использовать интерфейсы с неявными или явными операторами?

например. это приводит к ошибке времени компиляции:

public static explicit operator MyPlayer(IPlayer player)
{
 ...
}

"пользовательские преобразования в интерфейс или из него не допускаются"

Спасибо,

4b9b3361

Ответ 1

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

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

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