.NETのクラスの総数はいくらですか? の番号は、.NET 2.0、.NET 3.0、および.NET 3.5 SP1のダウンロードされたランタイムにあります。.NETのクラス数は?
は.NETをベースにしており、現在は6000クラスよりも が多いと書かれています。しかし、これが正しい場合は、 の番号ではわかりません。
たとえば、this pageは、アセンブリの数、名前空間、メソッドなど の数を示しますが、クラスの数は記載していません。
テストプラットフォーム:Windows XP 64ビットSP2、8 GB RAM。
更新4:私たちの論文が公開されました!クラス数に9911を使用しました(下記のアップデート3を参照)。ジャーナルはJournal of Proteome Researchで、タイトルは "MSQuant, an Open Source Platform for Mass Spectrometry-Based Quantitative Proteomics"です。残念ながら、論文の全文は自由に入手できず、要約のみです。
更新3:私は今、ソリューションに非常に近いと思います:.NET 3.5 SP1用の9911パブリッククラス。更新1で拡張された関数を再帰的に拡張し、サブフォルダとそのサブフォルダの型、クラス、パブリッククラスの数が報告されるように拡張しました。 これをC:\ WINDOWS \ Microsoft.NET で実行すると、40414種類が得られ、referenced articleの数からわずか0.2%です。 Full transcript - HTMLソースはタブで区切られているため、 スプレッドシートにインポートすることができます。 OpenOffice Calc。ここで publicクラスのブレークダウンです:
Framework:
Total: 6025
v1.1.4322
0
v2.0.50727
5265
v3.0
641
v3.5
119
Framework64:
Total: 3886
v2.0.50727
3126
v3.0
641
v3.5
119
アップデート2:私はNDependのを使用してみましたし、CQLは lextmによって提案され、それは.NET 2.0(89個のDLLを で、10%高い数値を与えましたC:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727):5855 クラス。これは、 プログラムソリューションとは異なるシステム上にありました(下記参照)。
手順:
ダウンロードNDependの(NDepend_2_12_1_3122.zip)、 解凍
- http://www.ndepend.com/NDependDownload.aspxを経由して7-ZIP
実行VisualNDepend.exe
メニューファイルと/解析する.NETアセンブリを選択/ < のC:¥WINDOWS¥Microsoft.NET¥Framework¥v2.0.50727 >/<の89個のDLLファイルを選択すべて>/OKを選択しました。
押して "クエリの作成"(右下)とタイプ/ペースト: "アクセシビリティ" ASSEMBLIES FROM
SELECT TYPES、 "cscompmgd"、 "CustomMarshalers"、 "IEExecRemote"、 "IEHost"、 "IIEHost" 、 "ISymWrapper"、 "Microsoft.Build。"Microsoft.Build.Tasks"、 "Microsoft.Build.Utilities"、 "Microsoft.JScript"、 "Microsoft.VisualBasic"、 "Microsoft.VisualBasic.Compatibility"、 "Microsoft。 VisualBasic.Compatibility.Data "、" Microsoft.VisualBasic.Vsa "、" Microsoft.VisualC "、" Microsoft.Vsa "、" Microsoft.Vsa.Vb.CodeDOMProcessor "、" Microsoft_VsaVb "、" mscorlib "、" sysglobl "、" 「System.Data.OracleClient」、「System.Data.SqlXml」、「System.Deployment」、「System.Design」、「System.Data.OracleClient」、「System.Data.OracleClient」、 "System.DirectoryServices"、 "System.DirectoryServices.Protocols"、 "System.Drawing"、 "System.Drawing.Design"、 "System.EnterpriseServices"、 "System.Management"、 "System.Messaging"、 "System。 「System.ServiceProcess」、「System.Transactions」、「System.Web」、「System.Web.Mobile」、「System.Web.Mobile」、「System.ServiceProcess」、「System.ServiceProcess」、 System.Web.RegularExpressions "、" System.Web.Services "、" System.Windows.Forms "、" System.XML "WHERE IsPublic AND IsClass
アップデート1:ジョンスキートの答えに基づいて、私は(下記参照) 機能を開発しました。予備的な結果は、5265 publicクラス、合計12626クラス、.NET 2.0の18317タイプです。 mscorlib.dllからの802の公開クラスとSystem.dllからの公開の のクラス678これはAssembly.LoadFrom()で 40が失敗した89個のDLLファイルからのものです。しかし、私は確信していません 正しいことを測るか、正しい場所で。
コール:
DotNetClassCount("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727")
機能:
Imports System.Reflection 'For Assembly
Imports System.IO 'For Path
Private Function DotNetClassCount(ByRef aBaseDirectory As String) _
As Integer
Dim classCount As Integer = 0
Dim failCount As Integer = 0 'For statistics only.
Dim folderItems As String() = Directory.GetFiles(aBaseDirectory)
Dim someFolderItem As String
For Each someFolderItem In folderItems
Dim fileName As String = Path.GetFileName(someFolderItem)
If Path.GetExtension(fileName) = ".dll" Then
Try
Dim asm3 As Assembly = _
Assembly.LoadFrom(someFolderItem)
Dim types As System.Type() = asm3.GetTypes()
Dim DLLclassCount As Integer = 0
Dim someType As System.Type
For Each someType In types
If someType.IsClass AndAlso someType.IsPublic Then
DLLclassCount += 1
End If
Next
classCount += DLLclassCount
Catch ex As Exception
'Fail silently...
failCount += 1
End Try
End If
Next
Return classCount
End Function 'DotNetClassCount()
列挙型、構造体およびインタフェースの場合、数は多少異なる場合があります。 – Lucero
また、イテレータブロック、匿名クラス、クロージャがあり、コンパイラ生成クラスがかなり生成される可能性があります。非公開クラスを探すのは意味がありません。それからT4のようなテクニックを使っていろいろなマシン生成クラスがありますが、これはしばしば非常によく似た動作をカプセル化しますが、別個のクラスに終わることがあります。ファクトリメソッドを介して動作するApiは、関連クラスの束を隠すことができ、主にインターフェイスのみを公開します。インターフェイスにはパブリックな実装者はいませんが、まだ使用可能です。全体的に、測定するのは難しいです... –
私はアセンブリを使用することをお勧めします。ReflectionOnlyLoadFromではなく、Assembly.LoadFrom、実際にはスピードのために。 –