2009-06-18 40 views
7

私はいくつかのフレームワークコード(System.AppDomain.GetDynamicDir法)を調査していた、これはすべてのアセンブラだったが示した:MethodImplAttributeは.NETでどのように機能しますか?

[MethodImpl(MethodImplOptions.InternalCall)] 
private extern string GetDynamicDir(); 

をこのメソッドが呼び出されたときにどうなりますか?私はこの特定の方法を意味するのではなく、一般的にこの属性を持つ方法を意味します。

答えて

10

MethodImplOptions.InternalCall:内部 コールを指定します。内部呼び出しは、 共通言語ランタイム自体内で実装されている メソッドへの呼び出しです。

基本的に、CLRはこのメソッド(おそらくネイティブコードである)の独自の実装を提供します。なぜなら、逆アセンブラではそれを見ることができないからです。

+0

ここでメソッドが見つかりました:http://www.koders.com/cpp/fid006DC4C11F458707221DA6ED2ED9CC3C7AE12E11.aspx ありがとう! –

6

回答here

(...)MethodImplOptions.InternalCall は、方法は、システム自体の内部で を実現している ランタイムを伝えるためにはexternと一緒に を使用されています。 これは、 のフレームワークメソッドの多くが、 の方が、 アンマネージドコードで実装されているため、多くの.NET .NET Frameworkで行われます。例えば、 Stringの方法、GC、および 数学のクラスの多くは InternalCallとしてマークされています。あなたが気づいてきたように、Guid.CompleteGuidInternalCallです。 MSDNから

関連する問題