Я хочу неявно привести реализацию к интерфейсу.Я знаю, что спецификация 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
.
Почему это не разрешено?