Технически? Да, конечно. Программы Goto завершаются и, таким образом, вы можете представлять все как они. В конце концов, машинный код в значительной степени похож на программу goto, поскольку циклы и все это делается с помощью условных переходов. Конечно, в .NET вы не сможете использовать только goto. В какой-то момент вы столкнетесь с местами, в которых вы либо используете другой код, который не написан подобным образом, либо вы находитесь в том месте, где языковая структура заставляет вас делать другие вещи (создавать классы, методы, функции и т. Д.). Но технически, да.
Должны ли вы это сделать? Точно нет. Программы Goto очень сложно поддерживать, а поскольку C# компилируется в язык посредника, который использует переходы, но на более высоком уровне, вы, вероятно, потеряете огромную производительность при этом. Кроме того, виртуальная машина может много оптимизировать в «нормальном» коде, который он не может, когда вы помещаете его в фиксированную схему goto.
КПП. исходный код компилируется в этот IL, который, по существу, что вы написали с помощью Гото (аннотаций мной):
// i = 0
IL_0001: ldc.i4.0 // Load integer value 0 to stack
IL_0002: stloc.0 // i // Store stack value in local variable 0
// goto loop-condition
IL_0003: br.s IL_0009 // Jump to IL_0009
// loop-start:
// i = i + 1
IL_0005: ldloc.0 // i // Load variable 0 to stack
IL_0006: ldc.i4.1 // Load integer `1` to stack
IL_0007: add // Add top two stack values
IL_0008: stloc.0 // i // Store result in local variable 0
// loop-condition:
// if (i < 10) { goto loop-start }
IL_0009: ldloc.0 // i // Load variable 0 to stack
IL_000A: ldc.i4.s 0A // Load integer `10` to stack
IL_000C: clt // Compare top two stack values
IL_000E: stloc.1 // CS$4$0000 // Store stack value in local variable 1
IL_000F: ldloc.1 // CS$4$0000 // Load variable 1 to stack
IL_0010: brtrue.s IL_0005 // Jump to IL_0005 if stack value is true
no. если бы программирование было таким, что я предпочел бы оставить свою работу и быть бездомным нищим –
@HighCore It _is_ возможно. Как работает сборка. Это _practical_? № –
@colejohnson справа. Моя точка все еще стоит, хотя –