.NET中的类的数量是多少?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

.NET中的类的总数是多少?下载的运行时为.NET 2.0,.NET 3.0和.NET 3.5 SP1的编号。

我们正在撰写一篇关于基于.NET的应用程序的科学论文,并且目前陈述了超过6000个类。但我不确定这是否是正确的数字。

例如,这个页面指出了程序集的数量,名称空间,方法等,但不包括类的数量。

测试平台:Windows XP 64位SP2,8 GB RAM。

我们的论文已经发表!我使用了9911的班级数量。该期刊是蛋白质组学研究杂志,标题是:“ MSQuant,一个基于质谱的定量蛋白质组学的开源平台 ”。不幸的是,论文的全文不是免费提供的,只是摘要。

我认为我现在已经非常接近解决方案:.NET 3.5 SP1的9911公共类。在更新1上扩展后,我将函数递归并进行了扩展,以便为任何子文件夹及其子文件夹报告类型,类和公共类的数量。在C:\ WINDOWS \ Microsoft.NET上运行这个命令可以得到40414种类型,仅为引用文章中的数字的0.2%。 完整的脚本 - HTML源代码是分开的,因此可以导入电子表格,例如OpenOffice Calc。这是公共课的分解:

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

我尝试使用lextm提供的NDepend和CQL,它为.NET 2.0(C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727中的89个DLL)提供了10%的更高数量:5855个类。这与系统编程解决方案的系统不同(参见下文)。

程序:

  1. 下载NDepend(NDepend_2_12_1_3122.zip),通过http://www.ndepend.com/NDependDownload.aspx
  2. 解压缩7-Zip
  3. 运行VisualNDepend.exe
  4. 菜单文件/选择.NET Assemblies to Analyze / <选择C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727中的89个DLL文件> / <全选> / OK。
  5. 按下“创建查询”(右下方)并键入/粘贴: 从组件“Accessibility”,“cscompmgd”,“CustomMarshalers”,“IEExecRemote”,“IEHost”,“IIEHost”,“ISymWrapper”,“Microsoft.Build.Engine”,“Microsoft.Build.Framework”,“Microsoft Microsoft.VisualBasic.Compatibility“,”Microsoft.VisualBasic.Compatibility.Data“,”Microsoft.VisualBasic.Vsa“,” “,”Microsoft.VisualC“,”Microsoft.Vsa“,”Microsoft.Vsa.Vb.CodeDOMProcessor“,”Microsoft_VsaVb“,”mscorlib“,”sysglobl“,”System“,”System.configuration“,”System.Configuration .Install“,”System.Data“,“System.Data.OracleClient”,“System.Data.SqlXml”,“System.Deployment”,“System.Design”,“System.DirectoryServices”,“System.DirectoryServices.Protocols”,“System.Drawing”,“System .Drawing.Design“,”System.EnterpriseServices“,”System.Management“,”System.Messaging“,”System.Runtime.Remoting“,”System.Runtime.Serialization.Formatters.Soap“,”System.Security“, “System.ServiceProcess”,“System.Transactions”,“System.Web”,“System.Web.Mobile”,“System.Web.RegularExpressions”,“System.Web.Services”,“System.Windows.Forms”, “System.XML”WHERE IsPublic和IsClassSystem.Deployment“,”System.Design“,”System.DirectoryServices“,”System.DirectoryServices.Protocols“,”System.Drawing“,”System.Drawing.Design“,”System.EnterpriseServices“,”System.Management“ ,“System.Messaging”,“System.Runtime.Remoting”,“System.Runtime.Serialization.Formatters.Soap”,“System.Security”,“System.ServiceProcess”,“System.Transactions”,“System.Web” ,“System.Web.Mobile”,“System.Web.RegularExpressions”,“System.Web.Services”,“System.Windows.Forms”,“System.XML”WHERE IsPublic AND IsClassSystem.Deployment“,”System.Design“,”System.DirectoryServices“,”System.DirectoryServices.Protocols“,”System.Drawing“,”System.Drawing.Design“,”System.EnterpriseServices“,”System.Management“ ,“System.Messaging”,“System.Runtime.Remoting”,“System.Runtime.Serialization.Formatters.Soap”,“System.Security”,“System.ServiceProcess”,“System.Transactions”,“System.Web” ,“System.Web.Mobile”,“System.Web.RegularExpressions”,“System.Web.Services”,“System.Windows.Forms”,“System.XML”WHERE IsPublic AND IsClass“System.Drawing.Design”,“System.EnterpriseServices”,“System.Management”,“System.Messaging”,“System.Runtime.Remoting”,“System.Runtime.Serialization.Formatters.Soap”,“ System.Security“,”System.ServiceProcess“,”System.Transactions“,”System.Web“,”System.Web.Mobile“,”System.Web.RegularExpressions“,”System.Web.Services“,”System。 Windows.Forms“,”System.XML“,其中IsPublic和IsClass“System.Drawing.Design”,“System.EnterpriseServices”,“System.Management”,“System.Messaging”,“System.Runtime.Remoting”,“System.Runtime.Serialization.Formatters.Soap”,“ System.Security“,”System.ServiceProcess“,”System.Transactions“,”System.Web“,”System.Web.Mobile“,”System.Web.RegularExpressions“,”System.Web.Services“,”System。 Windows.Forms“,”System.XML“,其中IsPublic和IsClass“System.Transactions”,“System.Web”,“System.Web.Mobile”,“System.Web.RegularExpressions”,“System.Web.Services”,“System.Windows.Forms”,“System.XML”WHERE IsPublic和IsClass“System.Transactions”,“System.Web”,“System.Web.Mobile”,“System.Web.RegularExpressions”,“System.Web.Services”,“System.Windows.Forms”,“System.XML”WHERE IsPublic和IsClass

我开发了一个函数(下面列出)。初步结果是5265个公开类,总计12626个类,.NET 2.0的18317个类。来自mscorlib.dll的802公共类和来自System.dll的678个公共类。这是来自89个DLL文件,其中40个使用Assembly.LoadFrom()失败。但我不确定我是在正确的地方衡量正确的事情。

调用:

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()
提问于
用户回答回答于

该页面给出了类型的数量(3.5SP1中的40513) - 对于区分类和结构/枚举/接口是否真的很重要?

我预计这些40K +中绝大多数会成为类,所以你的6000这个数字非常保守。

给定程序集列表,可以很容易地计算出类的数量:

int classes = assemblies.GetTypes()
                        .Where(t => t.IsClass)
                        .Count();

这假设你想要 所有的课程 - 你实际上只对公开类感兴趣吗?

int classes = assemblies.GetTypes()
                        .Where(t => t.IsClass && t.IsPublic)
                        .Count();

扫码关注云+社区