Что такое глобальный метод?

Что такое глобальный метод в .net? Я говорю о тех, которые созданыModuleBuilder.DefineGlobalMethod метод.

Можно ли эти методы вызывать из C # или других языков .net?

Ответы на вопрос(2)

Решение Вопроса

Трудно говорить об этом вообще в знакомых терминах, эта возможность вообще не раскрывается в языках C # или VB.NET. Однако компилятор C ++ / CLI использует его. То, как это показано в дизассемблерах, таких как Ildasm.exe или Reflector, также не стандартизировано.

Возможно, лучший угол - это Reflector, посмотрите сборку System.Data.dll. Он находится в безымянном пространстве имен ("-" в Reflector),<Module> узел. .Cctor, который вы видите, есть модуль initiailizer. То же самое животное, что и конструктор статического класса, но на уровне модуля. Он запускается, когда сборка загружается. C ++ / CLI использует его для инициализации библиотеки времени выполнения C.

Метод ___ CxxCallUnwindDtor (), который вы найдете, является примером «глобального метода». Язык C ++ / CLI не дает возможности сделать эти функции общедоступными, они всегда встроены в метаданные с внутренней доступностью. И, таким образом, не может быть вызван непосредственно из программы на C # или VB.NET. Я не играл достаточно с ModuleBuilder, чтобы знать, можно ли вообще что-то испортить, помимо того, что делает C ++ / CLI. Это всеочень неясный и не очень полезный.

 configurator26 сент. 2010 г., 11:33
Глядя на System.Data просветил меня. Там есть некоторые методы, которые определены как публичные, но я не могу найти доступ к ним из C #.

что метод может быть вызван без полного определения его имени, т.е.

Метод (Param) вместо Module.Method (Param).

В vb публичный метод внутри модуля является глобальным.

В c # открытый статический метод в статическом классе является глобальным.

 Tomasi26 сент. 2010 г., 08:15
Вы можете определенно вызывать методы модуля в VB без указания имени класса. Я думал, что это было в C #, но, очевидно, статический класс в C # трактуется иначе, чем модуль в VB.
 configurator26 сент. 2010 г., 07:49
Прежде всего, в C # (и я думаю, VB тоже) вы не можете вызывать публичные статические методы из других классов, не квалифицируя их с именем класса. Во-вторых, что более важно, DefineGlobalMethod вызывается в модуле сборки (а не в модуле VB, являющемся статическим классом), а не в модуле класса, поэтому метод не будет находиться внутри класса.
 configurator26 сент. 2010 г., 09:28
Я исправлен на фронте VB. Вы уверены, что это то, чтоDefineGlobalMethod хотя? Поскольку методы все еще принадлежат модулю VB, иDefineGlobalMethod находится прямо в DLL.

Ваш ответ на вопрос