Microsoft .NET Core库的某些部分是否隐藏在.dll文件中?

时间:2019-05-04 02:22:32

标签: c# cil

当我查看它们时,mscorlib.dll中的某些方法似乎为空。

我正在阅读有关MSIL的文章,并在Visual Studio中使用IL DASM浏览一些类方法。出于好奇,我去研究了一些Math类方法,发现其中一些是空的。

这是Math.ABS()中的代码...

#include <iostream>
#include <iomanip>
#include <algorithm>


using namespace std;


int main()
{
    int number;
    cout<<"Please enter the number of test scores you wish to record 
    provided that it does not exceed 50 \n";
    cin>> number;

    while(number>50)
    {
        cout<<"ERROR You cannot use a number greater than 50\n";
        break;
    }

    while(number<=50)
    {

        float testScores[number];

        int counter =0;
        while(counter<number)
         {
            cout<<"Enter the individual test scores";
            cin>> testScores[counter];
            counter++;
          }
    }

        return 0;
}

这是在Math.Sin()中找到的代码...

.method public hidebysig static int32  Abs(int32 'value') cil managed
{
  .custom instance void __DynamicallyInvokableAttribute::.ctor() = ( 01 00 00 00 ) 
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  ldc.i4.0
  IL_0002:  blt.s      IL_0006
  IL_0004:  ldarg.0
  IL_0005:  ret
  IL_0006:  ldarg.0
  IL_0007:  call       int32 System.Math::AbsHelper(int32)
  IL_000c:  ret
} // end of method Math::Abs

我怀疑它与该System.Security.SecuritySafeCriticalAttribute构造函数有关,但是即使在阅读了MSDN页面之后,还是不确定为什么它会隐藏IL代码,我仍不确定这样做。

有人对我所看到的有任何见识吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

internalcall表示该方法直接由CLR实现,而不是在IL中实现。