从不同的 Dll 文件访问内部 class

Accessing an internal class from a different Dll file

我对一些不应该工作的代码感到困惑,但奇怪的是,却在工作,我知道我只是忽略了一些明显的东西。我正在查看 Accord.NET framework and I downloaded it and its compiling just fine, but I'm confused about something. In one of the assemblies, called Accord.Math is a file called Indices.cs 的源代码。这是定义:

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

您可以在 line 35 上看到这个。

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

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

你可以在 line 329 上看到这个。

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

这是因为在文件 AssemblyInfo.cs 中你有这些属性:

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

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

您可以阅读更多关于 InternalsVisibleToAttribute on MSDN