Не удается сохранить результат неявного приведения к конкретному типу в интерфейсе - PullRequest
2 голосов
/ 27 мая 2019

Я хочу неявно привести реализацию к интерфейсу.Я знаю, что спецификация C # не допускает этого, и это хорошо для моего варианта использования.

Но когда я неявно приводил тип, который реализует интерфейс, я не могу сохранить его в переменнойэтот интерфейс.И это меня удивляет.

Это определения:

    public interface ISomeInterface
    {
    }

    public class SomeImplementation : ISomeInterface
    {
    }

    public class Class1
    {
        public static implicit operator SomeImplementation(Class1 class1)
        {
            return new SomeImplementation();
        }
    }

    var class1 = new Class1();

    // Works
    SomeImplementation s1 = class1;

    // Works
    ISomeInterface i1 = s1;

    // This is what I want to do
    ISomeInterface i2 = class1;
    // Cannot implicitly convert type 'Class1' to 'ISomeInterface'.
    // An explicit conversion exists (are you missing a cast?)

Я бы ожидал, что это скомпилируется, потому что можно неявно привести Class1 к SomeImplementation и SomeImplementationреализует ISomeInterface.

Почему это не разрешено?

1 Ответ

1 голос
/ 27 мая 2019

"Короче говоря, нет технической причины, по которой собственные преобразования из / в интерфейсы не допускаются. Причина в том, что они открывают двери для определенных сценариев, которые разработчики языка не хотели открывать, и для этого причина, по которой они их запретили. - для полной информации см. Преобразования (явные или неявные) и интерфейсы в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...