Рассмотрим следующий код:
class Program
{
public static explicit operator long(Program x) { return 47; }
static int Main(string[] args)
{
var x = new Program();
Console.WriteLine((decimal) x);
}
}
К моему удивлению, это выводит 47
; Другими словами, explicit operator long
вызывается, даже если приведение равно decimal
.
Есть ли что-то в спецификации С#, которая явно говорит, что это должно произойти (если да, где именно) или это результат какого-либо другого правила (ов) Im missing?