c# - 在哪里可以查看 .net 库背后的代码?

标签 c# asp.net vb.net

例如,在我的编码中我使用了 VB 函数

Round(1.325, 2)

产生数字 1.33。我想知道是否有地方可以查看“Round”函数背后的代码,以便我可以生成自己的代码。

问题原因:

我最近在一次采访中被要求生成一个不使用 .net 库中的 .Reverse 函数的反向函数。我成功了,但还有其他基本功能需要学习,例如将数字格式化为一定数量的小数位。能够查看 .net 库函数背后的代码将有助于我实现这一目标。

TIA - 提前致谢。

詹姆斯

最佳答案

对于用 C# 实现的 .Net Framework 部分,最容易使用 http://referencesource.microsoft.com/ 查看它们.对于其余部分,您需要下载 SSCLI 的副本或 browse the coreclr repository在 GitHub 上。

有一个free eBook published它试图解释大部分 SSCLI2 的内部工作原理,SSCLI2 是 .Net 2 的精简版。

InternalCall 由运行时使用定义的映射处理 in the file ecalllist.h in coreclr ,或在 ecall.cpp 中用于 sscli。例如,Math.Round 被映射为:

// snip
FCFuncStart(gMathFuncs)
    FCIntrinsic("Sin", COMDouble::Sin, CORINFO_INTRINSIC_Sin)
    FCIntrinsic("Cos", COMDouble::Cos, CORINFO_INTRINSIC_Cos)
    FCIntrinsic("Sqrt", COMDouble::Sqrt, CORINFO_INTRINSIC_Sqrt)
    FCIntrinsic("Round", COMDouble::Round, CORINFO_INTRINSIC_Round)
// snip

如果我们接着查看类 COMDouble,我们可以 find in comfloat.cpp 其实现,我们看到Math.Round背后的代码:

/*====================================Round=====================================
**
==============================================================================*/
FCIMPL1_V(double, COMDouble::Round, double x)
    FCALL_CONTRACT;

    // If the number has no fractional part do nothing
    // This shortcut is necessary to workaround precision loss in borderline cases on some platforms
    if (x == (double)((INT64)x)) {
        return x;
    }

    // We had a number that was equally close to 2 integers.
    // We need to return the even one.

    double tempVal = (x + 0.5);
    double flrTempVal = floor(tempVal);

    if ((flrTempVal == tempVal) && (fmod(tempVal, 2.0) != 0)) {
        flrTempVal -= 1.0;
    }

    return _copysign(flrTempVal, x);
FCIMPLEND

关于c# - 在哪里可以查看 .net 库背后的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41347934/

相关文章:

c# - 检查重复项时的性能

c# - 与 xaml View 模型交互

asp.net - IIS 8.5抛出404.3错误的ASPX页面

c# - 数据表Select语句问题

asp.net - 我的 Membership ValidateUser 请求有什么问题? (使用 ClientFormsAuthenticationMembershipProvider)

c# - 在 Entity Framework 4.1 中查询数据页面并获取总数的更好方法?

c# - 反序列化键值对

javascript - 带有下拉列表的 Asp.net 动态 gridview

asp.net - 验证复选框 asp.net c#

c++ - 使用 VB 进行人工智能