5

我对一些不应该工作的代码感到困惑,但奇怪的是,它正在工作,我知道我只是忽略了一些明显的东西。我正在查看Accord.NET框架的源代码,我下载了它并且编译得很好,但我对某些事情感到困惑。在其中一个名为 Accord.Math 的程序集中,有一个名为Indices.cs的文件。这是定义:

internal static class Indices
{
    // Lots of code
    // ...
    // ...
}

您可以在第 35 行看到这一点。

在另一个名为 Accord.Statistics 的程序集中,有一个名为Tools.cs的文件。在该文件中,有这一行:

return Accord.Math.Indices.Random(k, n);

您可以在第 329 行看到这一点。

我对这条线如何引用Accord.Math.Indices该类感到困惑,因为它被标记为internal. 我的理解是,标记为的类internal只能由驻留在同一 DLL 文件中的类访问。有人可以解释这是如何工作的吗?

4

1 回答 1

7

这是因为在文件中AssemblyInfo.cs您具有以下属性:

[assembly: InternalsVisibleTo("Accord.Tests.Math, PublicKey=...")] 
[assembly: InternalsVisibleTo("Accord.Tests.MachineLearning,...")] 
[assembly: InternalsVisibleTo("Accord.Tests.Statistics,...")] 
[assembly: InternalsVisibleTo("Accord.Statistics, ...")]

这些属性指定通常仅在当前程序集中可见的类型对指定程序集可见(如果您要求它对 Accord.Statistics 可见)。

您可以在 MSDN 上阅读更多信息InternalsVisibleToAttribute

于 2015-08-05T05:28:37.453 回答