5

機能しないはずのコードに混乱していますが、奇妙なことに、機能していて、明らかなことを見落としているだけです。私はAccord.NETフレームワークのソース コードを見ていて、それをダウンロードしてコンパイルしましたが、何か混乱しています。Accord.Math と呼ばれるアセンブリの 1 つに、 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 で表示されるように要求した場合)。

詳細についてInternalsVisibleToAttributeは、MSDN を参照してください。

于 2015-08-05T05:28:37.453 に答える