Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Комплексной системы оценки состояния охраны труда на производственном объекте (КСОТ-П): Цели и задачи Комплексной системы оценки состояния охраны труда и определению факторов рисков по охране труда...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2017-11-27 | 201 |
5.00
из
|
Заказать работу |
|
|
Иногда требуется определить такой член класса, который будет использоваться независимо от всех остальных объектов этого класса. Как правило, доступ к члену класса организуется посредством объекта этого класса, но в то же время можно создать член класса для самостоятельного применения без ссылки на конкретный экземпляр объекта. Для того чтобы создать такой член класса, достаточно указать в самом начале его объявления ключевое слово static.
Если член класса объявляется как static, то он становится доступным до создания любых объектов своего класса и без ссылки на какой-нибудь объект. С помощью ключевого слова static можно объявлять как переменные, так и методы. Наиболее характерным примером члена типа static служит метод Main(), который объявляется таковым потому, что он должен вызываться операционной системой в самом начале выполняемой программы.
Для того чтобы воспользоваться членом типа static за пределами класса, достаточно указать имя этого класса с оператором-точкой. Но создавать объект для этого не нужно. В действительности член типа static оказывается доступным не по ссылке на объект, а по имени своего класса.
Переменные, объявляемые как static, по существу, являются глобальными. Когда же объекты объявляются в своем классе, то копия переменной типа static не создается. Вместо этого все экземпляры класса совместно пользуются одной и той же переменной типа static. Такая переменная инициализируется перед ее применением в классе.
На применение методов типа static накладывается ряд следующих ограничений:
• В методе типа static должна отсутствовать ссылка this, поскольку такой метод не выполняется относительно какого-либо объекта
• В методе типа static допускается непосредственный вызов только других методов типа static, но не метода экземпляра из того самого же класса. Дело в том, что методы экземпляра оперируют конкретными объектами, а метод типа static не вызывается для объекта. Следовательно, у такого метода отсутствуют объекты, которыми он мог бы оперировать
|
• Аналогичные ограничения накладываются на данные типа static. Для метода типа static непосредственно доступными оказываются только другие данные типа static, определенные в его классе. Он, в частности, не может оперировать переменной экземпляра своего класса, поскольку у него отсутствуют объекты, которыми он мог бы оперировать
Класс можно объявлять как static. Статический класс обладает двумя основными свойствами. Во-первых, объекты статического класса создавать нельзя. И во-вторых, статический класс должен содержать только статические члены. Статический класс создается по приведенной ниже форме объявления класса, видоизмененной с помощью ключевого слова static.
static class имя класса { //...Статические классы применяются главным образом в двух случаях. Во-первых, статический класс требуется при создании метода расширения. Методы расширения связаны в основном с языком LINQ. И во-вторых, статический класс служит для хранения совокупности связанных друг с другом статических методов.
Стоит отметить, что для статического класса не допускается наличие конструктора экземпляра, но у него может быть статический конструктор.
Конструктор можно также объявить как static. Статический конструктор, как правило, используется для инициализации компонентов, применяемых ко всему классу, а не к отдельному экземпляру объекта этого класса. Поэтому члены класса инициализируются статическим конструктором до создания каких-либо объектов этого класса.
30. Сборщик мусора в C#
Сборка мусора снимает с разработчика огромное количество работы и проблем. Фактически, от разработчика требуется только выделить для объекта место в управляемой куче, а о том, когда и как он будет удалён, позаботится сборщик мусора.
При инициализации объекта, ему будет выделена необходимая для него память, ключевое слово new добавляет объект в управляемую кучу и возвращает ссылку на сам объект. Объект будет сам удалён тогда, когда он будет уже не нужен.
|
Корневым элементом можно назвать место в памяти, в котором содержатся ссылки на объект в управляемой куче.
Корневой объект относится к одной из категорий:
Во время сборки мусора исполняющая среда будет исследовать объекты в управляемой куче, чтобы определить, являются ли они, по-прежнему, корневыми для приложения. Для этого CLR будет строить граф объектов, который представляет каждый достижимый объект в куче.
Пример:
В данном примере недоступными оказались объекты C, F, I. Данные объекты будут удалены из памяти, оставшееся пространство в куче сжимается, указатель на следующий элемент настраивается таким образом, чтобы указывать на следующий доступный участок памяти. Конечный результат будет следующим:
К большим объектам(более 85000 байт) не применяется сжатие.
Для оптимизации данного процесса был придуман механизм «поколений».
Каждый объект в куче соответствует одному из 3 поколений.
Идея «поколений»: чем дольше объект находится в куче, тем выше вероятность того, что он в ней и останется.
Вначале сборщик мусора анализирует все объекты поколения 0, если после удаления всех ненужных объектов остаётся достаточное количество памяти, то все оставшиеся элементы повышаются до поколения 1. Если все объекты поколения 0 проверены, но по-прежнему требуется память, то начинается проверка на достижимость и удаление объектов из поколения 1, уцелевшие объекты поколения 1 повышаются до поколения 2. Если же сборщику мусора по-прежнему требуется память, то проверку на достижимость и удаление начинают проходить объекты поколения 2. Объекты поколения 2, которым удалось пережить сборку мусора, по-прежнему остаются объектами поколения 2, так как это старшее поколение.
Когда же запускается процесс сборки мусора:
|
Существует возможность программного управления сборщиком мусора. Для этого существует тип System.GC
Чтобы заставить уборщика мусора провести уборку, достаточно вызвать метода Collect, доступный в классе GC. При вызове также можно указать номер поколения, в котором необходимо произвести уборку мусора.
Желательно избегать вызовов любых методов Collect. Лучше не вмешиваться в работу сборщика мусора пока без этого можно обойтись.
|
|
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!