Если вы определяете неявный оператор, он должен возвращать указанный вами тип, в этом случае он должен иметь тип Program
.
public static implicit operator Program(int asd)
{ return 10; }
Здесь происходит то, что вы возвращаете целое число. Обычно это просто не компилируется, потому что вы должны вернуть Program
. Однако, поскольку вы определили неявное значение от int
до Program
, это не проблема; во время выполнения это преобразование будет использовано для приведения вашего int
в Program
.
Однако это преобразование не возвращает Program
, а int
, поэтому преобразование вызывается снова.
При выполнении (Program)3
это вызывает (Program)10
, что вызывает (Program)10
, что ... это бесконечный цикл.
Спросите себя, что вы на самом деле пытаетесь сделать, и почему вы возвращаете целое число, когда обещаете вернуть Program
.