今天在看。net的一些系统函数源代码,看到 public static class System.Math 类
里面关于三角函数定义如下,看不到具体的源代码了。但他好像不是引用那些DLL。
大家说说他是什么意思,下面是 Abs 函数定义的片段(用Reflector反编译)
public static class Math
{
      // Methods
      static Math();      public static decimal Abs(decimal value);
      [MethodImpl(MethodImplOptions.InternalCall)]
      public static extern double Abs(double value);

      public static short Abs(short value);
      public static int Abs(int value);
      public static long Abs(long value);
      [CLSCompliant(false)]
      public static sbyte Abs(sbyte value);
      [MethodImpl(MethodImplOptions.InternalCall)]
      public static extern float Abs(float value);那些extern 函数,都没有被反编译出来,那么它是外部的引用吗?

解决方案 »

  1.   

    看c,c++的实现,比如我给你贴一个abs int类型的实现public static int Abs(int num)
            {
                int abs = num;
                int tmp = num;
                tmp = tmp >> 31;
                abs = abs ^ tmp;
                return abs - tmp;
    }
      

  2.   

    "MethodImplOptions.InternalCall" is used to declare a method in managed code that has no
    managed implementation. The 
      

  3.   

    这些方法因为执行效率、安全性或者为了实现简单等不同原因,通过 IL 代码以外的 Native Code 形式提供实现代码。但与通过 DllImport 定义的 Interoper 方法不同的是,他们无需被定义为 static extern 方法,也无需通过单独的 DLL 导出函数被实现。它们作为 CLR 的诸多内部调用方式之一,被封装在一个看似密不透风的盒子里面,通过一个 InternalCall 的函数定义,将函数最终使用者与函数功能提供者隔离开来。参考http://book.chinaz.com/others/jishidaquan/17/40458.htmlhttp://www.cnblogs.com/allenlooplee/archive/2004/12/14/76669.html