Почему это разрешено компилятором, так как аннотация отклонений не имеет никакого смысла в такой ситуации?
Это разрешено компилятором, потому что я даже не думал, что кто-то может попытаться сделать это, когда я добавлю правила дисперсии в компилятор C # 4.0.
Предупреждения и ошибки компилятора: функции , и для того, чтобы функция была реализована, необходимо, как минимум, подумать о в какой-то момент перед тем, как отправлять компилятор . Я не смог этого сделать, и поэтому никогда не имел возможности даже обсуждать, должно ли быть предупреждение для такой ситуации.
Теперь, когда вы обратили на это мое внимание, возникает вопрос: должно ли быть функцией? Должен ли компилятор выдавать предупреждение (или ошибку) для этого случая?
Это призыв к суду. Мы хотели бы рассмотреть несколько вещей:
Является ли код тем, что кто-то может напечатать, думая, что он делает что-то разумное? Надеюсь, что нет; Можно надеяться, что разработчик, который знает достаточно о системе типов, чтобы создать вариант интерфейса, также знает, что дисперсия работает только с ссылочными типами. Но, возможно, есть разработчики, которые могли бы напечатать это, думая, что это будет работать. По крайней мере, это не кажется невероятным. Это не совсем придумано.
Код явно неправильный ? Да, это возможно. Кажется очень маловероятным, что кто-то сознательно хочет написать интерфейс, который выглядит вариант, но на самом деле это не так.
и так далее.
Мне нужно больше об этом подумать, но на первый взгляд кажется, что это может быть неплохим предупреждением для добавления в компилятор. Я поговорю об этом с командой, и мы рассмотрим возможность добавления ее в версию Roslyn.
Спасибо за идею!