none
Метод Control.Dispose() в коллекции Control.ControlCollection RRS feed

  • Вопрос

  • доброго дня..
    вопрос в следующем - Controls некий экземпляр класса Control.ControlCollection (Windows.Form), содержащий ссылки на экземпляры класса Control..
    Почему при вызове метода Dispose() для отдельного элемента коллекции размер коллекции уменьшается?

    // Controls.Count = 10
    for (int i = Controls.Count - 1; i >= 0 ; i--)
    {
    if (Controls[i] != null)
    {
    Controls[i].Dispose();
    }
    }
    // Controls.Count = 0

    В каком месте кода какого класса это происходит?..
    10 апреля 2014 г. 16:31

Ответы

  • Метод Dispose - виртуальный. Он перегружен по всей иерархии контролов. Если посмотреть реализацию перегрузок этих методов, то там можно увидеть сложную обработку разных типов контролов. Если проследить выше по цепочке, там будет вызов метода Remove.

    Если возникло желание самостоятельно покопаться в коде, можете установить одну из утилит: Reflector, DotPeek, JustDecompile. Первая ныне платная, две другие бесплатны.

    11 апреля 2014 г. 6:58

Все ответы

  • Метод Dispose - виртуальный. Он перегружен по всей иерархии контролов. Если посмотреть реализацию перегрузок этих методов, то там можно увидеть сложную обработку разных типов контролов. Если проследить выше по цепочке, там будет вызов метода Remove.

    Если возникло желание самостоятельно покопаться в коде, можете установить одну из утилит: Reflector, DotPeek, JustDecompile. Первая ныне платная, две другие бесплатны.

    11 апреля 2014 г. 6:58
  • Или можете посмотреть исходный код .NET.

    Сделаем содержимое сообщества лучше, вместе!

    11 апреля 2014 г. 11:06
    Модератор