Есть ли части библиотеки Microsoft .NET Core, которые скрыты в файлах .dll? - PullRequest
1 голос
/ 04 мая 2019

Некоторые методы внутри mscorlib.dll кажутся пустыми, когда я их просматриваю.

Я читал о MSIL и использовал IL DASM в Visual Studio для просмотра некоторых методов класса. Из любопытства я начал изучать некоторые методы класса Math и обнаружил, что некоторые из них пусты.

Вот код из Math.ABS () ...

.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

А вот код, найденный в Math.Sin () ...

.method public hidebysig static float64  Sin(float64 a) cil managed internalcall
{
  .custom instance void System.Security.SecuritySafeCriticalAttribute::.ctor() = ( 01 00 00 00 ) 
  .custom instance void __DynamicallyInvokableAttribute::.ctor() = ( 01 00 00 00 ) 
} // end of method Math::Sin

У меня есть подозрение, что это связано с этим конструктором System.Security.SecuritySafeCriticalAttribute, но я не уверен, что он делает даже после прочтения на нем страницы MSDN или почему он скрывает код IL.

У кого-нибудь есть понимание того, что я вижу?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 04 мая 2019

internalcall указывает, что метод реализуется CLR напрямую, а не в IL.

...