Насколько велика библиотека классов .NET (3.5) Framework? - PullRequest
10 голосов
/ 26 января 2010

Я регулярно читал, что фреймворк слишком велик для одного разработчика, чтобы иметь опыт работы с каждой его частью. Наличие реальных цифр, безусловно, поможет взглянуть на вещи в перспективе.

MSDN, кажется, перечисляет их все, но фактических чисел нет (из того, что я видел), и часами считать их не моя идея продуктивного времени.

  • Количество пространств имен
  • Количество классов
  • Количество структур
  • Количество интерфейсов

Я понимаю, что есть также делегаты, перечисления, события и т. Д., Но перечисленные выше типы представляют наибольший интерес.

Кроме того, было бы интересно узнать количество типов в библиотеке базовых классов (BCL), а также размер всей библиотеки классов классов (FCL).

Эта информация будет полезна двумя способами:

Во-первых, чтобы получить представление о том, с какой общей частью фреймворка вы действительно работали и сколько вам еще предстоит выучить.

Во-вторых, многие программисты с других платформ (и не технические специалисты) часто удивляются тому, что программист может проводить большую часть своего времени в «.NET Framework». Наличие некоторых цифр, безусловно, поможет объяснить, почему это не показатель узких навыков / опыта.

[Update]

Используя код Эндрю (в моей системе .NET 3.5 SP1), я получаю:

Classes: 12688
Value types: 4438
Interfaces: 1296

Ответы [ 5 ]

6 голосов
/ 26 января 2010

Эти 2 сообщения в блоге посвящены этой теме:

Результаты разбиты по количеству сборок, пространств имен, типов, элементов и других элементов..

5 голосов
/ 26 января 2010

Вы можете использовать рефлексию, чтобы найти количество различных типов в BCL, но что вы надеетесь достичь с помощью этой информации?

Вот пример того, как получить эту информацию:

using System;
using System.Linq;
using System.Reflection;

class Example
{
    static void Main()
    {
        Assembly mscorlib = typeof(String).Assembly;

        // Number of classes
        Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsClass).Count());
        // Number of value types (structs and enums)
        Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsValueType).Count());
        // Number of interfaces
        Console.WriteLine(mscorlib.GetTypes().Where(t => t.IsInterface).Count());
    }
}

Просто обратите внимание, что вам нужно будет делать это для каждой сборки в рамках, чтобы получить общее число.

Редактировать: Вот быстрое и грязное решение, которое должно дать вам общее представление о количестве типов в BCL:

using System;
using System.Linq;
using System.Reflection;
using System.IO;
using System.Runtime.InteropServices;

class Example
{
    static void Main()
    {
        // Get all DLLs in the current runtime directory
        var assemblies = Directory.GetFiles(
            RuntimeEnvironment.GetRuntimeDirectory())
            .Where(f => f.EndsWith(".dll"));

        Int32 classes = 0;
        Int32 valueTypes = 0;
        Int32 interfaces = 0;

        foreach (String name in assemblies)
        {
            // We need to catch BadImageFormatException
            // because not all DLLs in the runtime directory
            // are CLR assemblies.
            try
            {
                var types = Assembly.LoadFile(name).GetTypes();

                classes += types.Where(t => t.IsClass).Count();
                valueTypes += types.Where(t => t.IsValueType).Count();
                interfaces += types.Where(t => t.IsInterface).Count();
            }
            catch (BadImageFormatException) { }
        }

        Console.WriteLine("Classes: {0}", classes);
        Console.WriteLine("Value types: {0}", valueTypes);
        Console.WriteLine("Interfaces: {0}", interfaces);
    }
}
2 голосов
/ 26 января 2010

Я сам этим не пользовался, но думаю, что именно такую ​​информацию NDepend может предоставить вам.

0 голосов
/ 26 января 2010

Сложно ответить, не имея определения, что означает «большой» - размер IL (.dll)? Размер исходного кода? Объем работ? Кроме того, вы говорите о самой последней распространяемой версии 3.5 SP1 без каких-либо официальных надстроек (то есть F #, MVC и т. Д.), Которые являются полностью поддерживаемыми частями «фреймворка», но не поставляются с 3.5 распространяемый?

Я не пытаюсь быть трудным ... Я просто говорю, что есть несколько переменных, которые влияют на то, как можно даже определить, что должно быть измерено, затем некоторые вопросы о том, какой тип палки используется для его измерения. .

0 голосов
/ 26 января 2010

Он настолько большой, что никто не знает его размер?

Что касается размера файла, в моей системе платформы 2.0, 3.0 и 3.5 занимают около 130 МБ дискового пространства, а 64-разрядные версии занимают примерно93MB.Но это не считая того, что является ядром для самой Win7.

...