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

Этот вопрос уже имеет ответ здесь:

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

Например, это повышает ошибку времени компиляции:

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

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

Спасибо,

23
задан theburningmonk 12 March 2010 в 14:05
поделиться

1 ответ

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

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

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

32
ответ дан 29 November 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: