首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.NET中的类数是多少?

.NET中的类数是多少?
EN

Stack Overflow用户
提问于 2009-09-10 18:42:42
回答 1查看 6.9K关注 0票数 17

.NET中的类总数是多少?用于.NET 2.0、.NET 3.0和.NET 3.5 SP1的下载运行时中的数字。

我们正在写一篇关于基于.NET的应用程序的科学论文,目前声明有6000多个类。但我不确定这是不是正确的数字。

例如,this page说明了程序集、命名空间、方法等的数量,但没有说明类的数量。

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

更新4:我们的论文已经发表了!我使用9911表示类的数量(参见下面的更新3)。期刊是Journal of Proteome Research,标题是:"MSQuant, an Open Source Platform for Mass Spectrometry-Based Quantitative Proteomics“。不幸的是,这篇论文的全文并不是免费提供的,只有摘要。

更新3:我想我现在已经非常接近一个解决方案了: 9911个.NET 3.5 SP1的公共类。在更新1中进行了扩展,我使该函数成为递归的,并对其进行了扩展,以便报告所有子文件夹及其子文件夹的类型、类和公共类的数量。在C:\WINDOWS\Microsoft.NET上运行它会得到40414个类型,仅为referenced article中的0.2 %。Full transcript源代码是用制表符分隔的,因此可以导入到电子表格中,例如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

更新2:我尝试使用lextm建议的NDepend和CQL,它给出的.NET 2.0的数字要高出10% (在Lextm5855类中有89个DLL)。这是在与编程解决方案不同的系统上(见下文)。

操作步骤:

通过http://www.ndepend.com/NDependDownload.aspx

  • Unzip使用7-Zip

  • Download NDepend (NDepend_2_12_1_3122.zip)运行VisualNDepend.exe

  • Unzip程序集/<选择C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>/中的89个

文件/确定。

  • 按"Create

  • “(右下角)并键入/粘贴:

从程序集"Accessibility","cscompmgd","CustomMarshalers","IEExecRemote","IEHost","IIEHost","ISymWrapper","Microsoft.Build.Engine","Microsoft.Build.Framework","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","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“其中IsPublic和IsClass

更新1:基于Jon Skeet的回答,我开发了一个函数(如下所示)。初步结果是5,265个公共类,总共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()
EN

回答 1

Stack Overflow用户

发布于 2009-09-10 18:48:30

该页面给出了类型的数量(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();
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1406996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档