3

Я работаю со структурой, которая требует неявного оператора против строк и сталкивается с основным вопросом, о котором я не думал.Есть ли возможность перегрузить явный оператор, если неявный был перегружен в C#?

public static implicit operator Version (string value) {...} 

Я могу понять, имея только явный оператор для обеспечения отливки, но не могу думать о ситуации, когда вы нуждаетесь в этом, если неявный оператор уже перегружен. Есть ли это?

+3

от/до тех же типов, которые я предполагаю? Вы не совсем поняли. –

+0

@HenkHolterman: Ну, ваш комментарий заставлял меня думать. У вас может быть структура в коробке в объект, а затем требуется явное приведение, в то время как трансляция из строки может оставаться неявной. –

+1

Ну, сначала сделайте полный вопрос: вы спрашиваете о двух операторах, так что отправляйте их обоих. –

ответ

8

Нет. На самом деле вы не можете определить неявный явный оператор преобразования для того же преобразования. Это время компиляции ошибка:

public class Foo 
{ 
    public static implicit operator Foo(string value) 
    { 
     Console.WriteLine("implicit"); 
     return null; 
    } 

    public static explicit operator Foo(string value) 
    { 
     Console.WriteLine("Explicit"); 
     return null; 
    } 
} 

Это дает ошибку:

Duplicate user-defined conversion in type ...

Если вы определяете неявное преобразование можно записать явное преобразование, и он будет использовать код неявного, чтобы сделать преобразование, но нет способа определить код для неявного преобразования и явного преобразования, которые делают разные вещи.