Как MethodImplAttribute работает в.NET?

C # и .NET не позволяют объявлять конструктор интерфейса.

Это просто обязательное ограничение реализации этого интерфейса (см. ISerializable в библиотеках .NET).

Если вы подумаете об этом, иметь конструктор в интерфейсе не имеет смысла, так как вы должны знать конкретный класс, который вы хотите создать, когда вызываете конструктор. Как бы вы вызвали такой конструктор интерфейса и каков был бы результат?

7
задан Michiel van Oosterhout 18 June 2009 в 09:23
поделиться

2 ответа

From MSDN :

MethodImplOptions.InternalCall : указывает внутренний вызов. Внутренний звонок - это звонок в метод, реализованный в рамках сама общеязыковая среда выполнения.

Итак, в основном, CLR предоставляет свою собственную реализацию этого метода (которая, вероятно, находится в машинном коде), поэтому вы не можете увидеть ее в дизассемблере.

10
ответ дан 6 December 2019 в 12:53
поделиться

Насколько мне известно, ответ на три ваших вопроса: нет.

Я хотел бы обратить ваше внимание на то, что Документация Apple не документирует унаследованные методы в документации подклассов.

Более того, NSDictionary и NSMutableDictionary не так уж редки, чтобы напоминать об их наиболее распространенных методах. Для меня достаточно ссылки на существующую документацию, которая у вас уже есть.

Что касается вашего конкретного поведения этих общих методов в вашем подклассе, я бы просто вставил специальный раздел в Подробное описание chapter.

В любом случае, возможным обходным решением было бы дать и объявление, и реализацию ваших унаследованных методов. Но это немного излишне просто для документации: Используется MethodImplOptions.InternalCall в сочетании с extern, чтобы сообщить время выполнения, в котором реализован метод внутри самой системы. Это сделано для многих основных .NET. Рамочные методы, которые лучше обслуживается путем внедрения в неуправляемый код. Например, многие из методы на String , GC и Математические классы отмечены как Внутренний вызов . Как вы заметили, Guid.CompleteGuid также является InternalCall .

6
ответ дан 6 December 2019 в 12:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: