Принципы объектно-ориентированного программирования




ГЛАВА 5 Классы


    ГЛАВА 5 Классы
    ГЛАВА 5 Классы Определение классов Члены класса Модификаторы доступа Метод Main Аргументы командной строки Возвращаемые значения Несколько методов Main Конструкторы Статические члены и члены экзем...
    Определение классов
    Определение классов Синтаксис определения классов на С#, прост, особенно если вы программируете на C++ или Java. Поместив перед именем вашего класса ключевое слово class, вы вставляете члены класс...
    Члены класса
    Члены класса В главе 4 я рассказал о типах, определенных в CIS (Common Type System). Эти типы поддерживаются как члены классов С# и бывают следующих видов....
    Поле.
    Поле. Так называется член-переменная, содержащий некоторое значение. В ООП поля иногда называют данными объекта. К полю можно применять несколько модификаторов в зависимости от того, как вы собира...
    Метод.
    Метод. Это реальный код, воздействующий на данные объекта (или поля). В этой главе мы сосредоточимся на определении данных класса. Подробнее о методах см. главу 6....
    Свойства.
    Свойства. Их иногда называют разумными полями (smart fields), так как они на самом деле являются методами, которые клиенты класса воспринимают как поля. Это обеспечивает клиентам большую степень а...
    Константы.
    Константы. Как можно предположить, исходя из имени, константа — это поле, значение которого изменить нельзя. Ниже мы обсудим константы и сравним их с сущностью под названием неизменяемые (readonly...
    Индексаторы.
    Индексаторы. Если свойства — это разумные поля, то индексаторы _ это разумные массивы, так как они позволяют индексировать объекты методами-аксессорами get и set. С помощью индексатора легко проин...
    События.
    События. Событие вызывает исполнение некоторого фрагмента кода. События — неотъемлемая часть программирования для Microsoft Windows. Например, события возникают при движении мыши, щелчке или измен...
    Операторы.
    Операторы. Используя перегрузку операторов С#, можно добавлять к классу стандартные математические операторы, которые позволяют писать более интуитивно понятный код. О перегрузке операторов см. гл...
    Модификаторы доступа
    Модификаторы доступа Теперь, зная, что типы могут быть определены как члены класса С#, познакомимся с модификаторами, используемыми для задания степени видимости, или доступности данного члена для...
    Модификаторы доступа в С#.
    Табл. 5-1 . Модификаторы доступа в С#. Модификатор доступа Описание public Член доступен вне определения класса и иерархии производных классов. protected Член невидим за пределами класса, к нему м...
    Метод Main
    Метод Main У каждого приложения на С# должен быть метод Main, определенный в одном из его классов. Кроме того, этот метод должен быть определен как public и static (ниже я объясню, что значит stat...
    Аргументы командной строки
    Аргументы командной строки Вы можете обращаться к аргументам командной строки приложения, объявив метод Main как принимающий аргументы типа массива строк. Затем аргументы могут обрабатываться так...
    Примечание
    Примечание Разработчики на Microsoft Visual C++ уже приучены к циклической обработке массива, представляющего аргументы командной строки. Но в отличие от C++ в С# массив аргументов командной строк...
    Возвращаемые значения
    Возвращаемые значения Большинство примеров в этой книге определяют метод Main так: class SomeClass { public static void Main() { } } Однако вы можете определить метод Main так, чтобы он возвращал...
    Несколько методов Main
    Несколько методов Main В С# разработчиками включен механизм, позволяющий определять более одного класса с методом Main. Зачем это нужно? Одна из причин — необходимость поместить в ваши классы тест...
    Конструкторы
    Конструкторы Одним из величайших преимуществ языков ООП, таких как С#, в том, что вы можете определять специальные методы, вызываемые всякий раз при создании экземпляра класса. Эти методы называют...
    Статические члены и члены экземпляров
    Статические члены и члены экземпляров Как и в C++, вы можете определить член класса как статический (static member) или член экземпляра (instance member). По умолчанию каждый член определен как чл...
    Инициализаторы конструкторов
    Инициализаторы конструкторов Во всех конструкторах С#, кроме System.Object, конструкторы базового класса вызываются прямо перед исполнением первой строки конструктора. Эти инициализаторы конструкт...
    Примечание
    Примечание В отличие от Visual C++ для обращения к членам экземпляров вы не можете использовать инициализаторы конструкторов, кроме конструкторов текущего класса....
    Константы и неизменяемые поля
    Константы и неизменяемые поля Можно с уверенностью сказать, что возникнут ситуации, когда изменение некоторых полей при выполнении приложения будет нежелательно. Например, это могут быть файлы дан...
    Константы
    Константы Из названия легко догадаться, что константы (constants), представленные ключевым словом const, — это поля, остающиеся постоянными в течение всего времени жизни приложения. Определяя что-...
    Неизменяемые поля
    Неизменяемые поля Поле, определенное как const, ясно указывает, что программист намерен поместить в него постоянное значение. Это плюс. Но оно работает, только если известно значение подобного пол...
    Очистка объектов и управление ресурсами
    Очистка объектов и управление ресурсами Возможность обеспечивать очистку и освобождение ресурсов после завершения исполнения компонентов — одна из самых важных функций системы на основе компоненто...
    Немного истории
    Немного истории Несколько лет назад, в самом начале работы над проектом .NET, активно дебатировалась проблема управления ресурсами. Первые участники создания .NET пришли из команд, занятых в разра...
    Детерминированное завершение
    Детерминированное завершение От истории перейдем к детерминированному завершению. Как только определено, что объект более не используется, код его завершения освобождает удерживаемые объектом ссыл...
    Память.
    Память. Память, занятая графом объекта, после освобождения быстро возвращается в пул для последующего использования....
    Описатели окон.
    Описатели окон. Объем памяти, занимаемой объектом окно, в GC не отображает реальный расход памяти. Часть памяти занято внутри самой ОС для представления окна. В связи с этим максимум выделяемого с...
    Соединения с базой данных.
    Соединения с базой данных. Одновременные соединения с базой данных обычно лицензируются, поэтому их число может быть ограничено. Важно своевременно возвращать их в пул для повторного использования...
    Файлы.
    Файлы. Поскольку существует единственный экземпляр некоторого файла, а для многих операций нужен монопольный доступ к нему, важно закрывать описатели файла, когда последний не используется....
    Сбор мусора с помощью счетчика ссылок
    Сбор мусора с помощью счетчика ссылок Счетчик ссылок выполняет разумную функцию, зачастую обеспечивая детерминированное завершение. Но в ряде совсем уж редких случаев, одним из примеров которых сл...
    Сбор мусора с помощью трассировки
    Сбор мусора с помощью трассировки Трассирующий сборщик подает еще более слабую надежду, чем счетчик ссылок. В силу некоторых причин эта система более интенсивно использует отложенные вычисления пр...
    Производительность
    Производительность Производительность связана с проблемой завершения, и поэтому является важным аспектом. Команда разработчиков .NET считает, что должен существовать некоторый трассирующий сборщик...
    Совершенное решение
    Совершенное решение Согласитесь, что совершенное решение этой проблемы — создать систему, в которой каждый объект не требует много памяти, его легко использовать и восстанавливать. В такой идеальн...
    Почти совершенное решение
    Почти совершенное решение Итак, решения по управлению ресурсами не могут дать все и сразу. А если реализовать детерминированное завершение лишь для тех объектов, для которых оно, по вашему мнению,...
    Объединение
    Объединение Каждый раз, когда вы берете объект, требующий детерминированного завершения, и сохраняете в объекте, который этого не требует, вы теряете детерминированность (так как детерминированнос...
    Приведение
    Приведение Во время приведения типов возникают сходные проблемы. Попробуйте ответить на такие вопросы: могу ли я привести детерминированный объект к System.Object! Если так, то будут ли при этом п...
    Интерфейсы
    Интерфейсы Теперь вы видите, насколько сложна проблема. Если детерминированный объект реализует интерфейсы, то подсчитываются ли ссылки, типизированные как интерфейсные ссылки? Если да, то для все...
    Использование метода Dispose
    Использование метода Dispose Итак, на чем мы остановились? На данный момент мы уже рассмотрели детерминированное завершение, которое работает так: GC отслеживает, на какие объекты ссылаются; у GC...
    Наследование
    Наследование Как я сказал в главе 1, чтобы построить — в терминах данных или поведения — класс на основе другого класса, применяется наследование. Оно принадлежит к правилам заменяемости, а именно...
    Использование нескольких интерфейсов
    Использование нескольких интерфейсов Позвольте мне придерживаться ясности в изложении этого вопроса, поскольку множественное наследование обсуждали во многих группах новостей и рассылках: С# не по...
    Изолированные классы
    Изолированные классы Если вы хотите быть уверенными, что класс никогда не будет использован как базовый, при определении класса примените модификатор sealed. Единственное ограничение: абстрактный...
    Подведем итоги
    Подведем итоги Понятие о классах и их взаимоотношений с объектами — основа идеи объектного программирования. Объектно-ориентированные функции С# — наследие C++, дополненное и улучшенное функциями...








Начало