C # является статическим типом языка.Это означает, что компилятор читает ваш код C # и превращает его в файл .exe или .dll на языке ассемблера.
Насколько я понимаю, когда компилятор генерирует метод из вашего кода, тело метода выглядит так:полностью не зависит от названия метода.Имя метода - это просто атрибут, связанный с фрагментом кода.
Движок времени выполнения использует нисходящую логику;он начинается в начале вашей программы (метод Main
) и выполняет каждый оператор, по одному за раз.Например, когда он сталкивается с эквивалентом «Call MyMethod» на ассемблере, он просто переходит к первому оператору в фрагменте кода, связанному с «MyMethod», и начинает выполняться оттуда.После того, как все операторы в блоке кода «MyMethod» были выполнены, механизм выполнения возвращается туда, где он был до вызова MyMethod.
Итак, 3 основных цели имени метода:
- Разрешение вам и другим программистам, использующим ваш код или сборку, идентифицировать метод и отличить его от других методов
- Разрешение компилятору узнать, какой метод уровня сборки связан с вызовами методов в вашем исходном коде
- И, наконец, выполнение связанного с методом фрагмента кода во время выполнения.
То, что вы пытаетесь сделать, позволяет обойти все цели получения уникальных сигнатур для каждого метода.Теперь я понимаю, что это просто пример программы, поэтому я не буду указывать, что это за плохая практика.Однако я боюсь, что удаление имени метода из связанного с ним тела во время выполнения совершенно невозможно , без динамического определения нового метода или, как уже упоминалось ранее, с использованием делегатов.
Возвращаясь к статической природе C #, вы пытаетесь сделать более распространенную функцию языков с динамической типизацией, таких как JavaScript, PHP, Lua и другие.Например, в JavaScript вы можете определить функцию (эквивалентную методу JavaScript), присвоить ее переменной, затем изменить значение переменной так, как вы хотите, и вызвать ее на лету.Эта функциональность становится возможной благодаря тому, как выполняется код: в отличие от C # и других языков со статической типизацией, каждый оператор читается как читаемый человеком исходный код, интерпретируется в один или несколько операторов исполняемого машиночитаемого кода и выполняется,и двигатель времени выполнения переходит к следующему оператору (или к началу вызова функции, в зависимости от обстоятельств).