Но если вы указали на метод, можете ли вы когда-нибудь рискнуть переместить этот метод?
Как вы планируете получать указатель на метод? C# не имеет такой операции!
Предположим ради аргумента, который вы сделали. Ответ на ваш вопрос - нет, методы не перемещаются GC. Методы не удаляются, так почему бы это так? переехал? Вы перемещаете что-то, чтобы сжать отверстие, оставшееся после удаления.
Но вы не получаете указателя на метод, в первую очередь на C#. Вы получаете делегата.
Есть способы получить необработанный указатель с кодом маршалинга, но в чем смысл? Вы не можете вызвать его.
Если у вас есть указатель на метод, существует ли небезопасный/быстрый способ его вызова?
Но вы не есть указатель на метод в C#, так что опять же, вопрос бессмыслен.
Вы вызываете делегата, вызывая делегат.
Теперь, если вам каким-то образом удалось получить указатель на метод на C#, есть ли способ вызвать его, который быстрее и легче, чем сделать делегат, а затем вызвать это?
No.В C# нет способа заставить компилятор генерировать команду calli
, которая вам нужна.
Характеристика Значение возможно; Я когда-то играл с прототипом функций, которые вы хотите. Когда в последний раз я видел список приоритетов, он был очень-очень низким в этом списке, поэтому я не ожидал этого в ближайшее время.
У C# нет указателей. У вас есть ссылки на объекты (или делегаты), и вам не придется беспокоиться о том, чтобы они двигались. Если они это сделают, вы никогда не узнаете об этом. – Steve
Сборщик мусора будет уплотнять кучу. Однако, когда он уплотняет кучу, он обрабатывает обновление адресов памяти. –
@Steve ... У C# есть указатели, чтобы быть точными [MSDN] (http://msdn.microsoft.com/en-us/library/t2yzs44b.aspx) – Jim