Этот вопрос уже имеет ответ здесь:
Я просто задаюсь вопросом, знает ли кто-либо причину, почему Нельзя использовать интерфейсы с неявными или явными операторами?
Например, это повышает ошибку времени компиляции:
public static explicit operator MyPlayer(IPlayer player)
{
...
}
"пользовательские преобразования в или от интерфейса не позволяются"
Спасибо,
Раздел 10.9.3 спецификации C # разъясняет это. Краткая версия заключается в том, что это запрещено, чтобы пользователь мог быть уверен, что преобразования между ссылочными типами и интерфейсами будут успешными тогда и только тогда, когда ссылочный тип действительно реализует этот интерфейс, и что когда это преобразование имеет место, на тот же объект фактически ссылаются.
Определение неявного или явного преобразования между ссылочными типами дает пользователю ожидание того, что произойдет изменение ссылки; в конце концов, одна и та же ссылка не может быть обоих типов. С другой стороны, пользователь не ожидает такого же ожидания преобразований между ссылочными типами и типами интерфейсов.
Определенным пользователем преобразованиям не разрешено преобразовывать из или в interface-types . В частности, это ограничение гарантирует, что при преобразовании в тип интерфейса не будут происходить определяемые пользователем преобразования, и что преобразование в тип интерфейса будет успешным только в том случае, если преобразуемый объект действительно реализует указанный тип интерфейса .