从不同的 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
我对一些不应该工作的代码感到困惑,但奇怪的是,却在工作,我知道我只是忽略了一些明显的东西。我正在查看 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