Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как пишется деструктор классы в С# ?
|
|||
|---|---|---|---|
|
#18+
Как пишется деструктор класса в С# ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 14:23 |
|
||
|
Как пишется деструктор классы в С# ?
|
|||
|---|---|---|---|
|
#18+
Destructors are used to destruct instances of classes. A destructor is declared using the following form: [attributes] ~ identifier( ) { destructor-body } where: attributes (Optional) Additional declarative information. For more information on attributes and attribute classes, see C# Attributes. identifier The identifier is the same as the class name. destructor-body The block that contains the statements that destruct the instance of the class. Example The following example creates three classes that make a chain of inheritance. The class First is the base class, Second is derived from First, and Third is derived from Second. All three have destructors. In Main(), an instance of the most derived class is created. When the program runs, notice that the destructors for the three classes are called automatically, and in order, from the most derived to the least derived. // Destructors1.cs using System; class First { ~First() { Console.WriteLine("First's destructor is called"); } } class Second: First { ~Second() { Console.WriteLine("Second's destructor is called"); } } class Third: Second { ~Third() { Console.WriteLine("Third's destructor is called"); } } public class MainClass { public static void Main() { Third myObject = new Third(); } } Output Third's destructor is called Second's destructor is called First's destructor is called ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2003, 14:46 |
|
||
|
Как пишется деструктор классы в С# ?
|
|||
|---|---|---|---|
|
#18+
Деструкторы существуют в C#, однако из-за применения системы сборки мусора невозможно предсказать, когда они будут запущены, и их использование не приветствуется. Поскольку в C# за освобождение ресурсов отвечает сборщик мусора, обычно вообще не возникает необходимости в деструкторах, т.е. программисту не требуется явно иметь дело с освобождением памяти. Однако все же в ряде случаев может потребоваться выполнить некоторые действия перед тем, как переменные будут уничтожены (например, закрыть файлы), и C# представляет для этого два способа: метод Dispose() или Close() и метод Finalize() . Эти методы созданы для совместной работы. Из всех вариантов освобождения ресурсов метод Finalize() наиболее близко соответствует концепции традиционного деструктора. Однако имеется пара препятствий: 1) Finalize() является недетерминированным. Это означает, что невозможно предсказать, когда экземпляр класса будет уничтожен. Кроме того, не следует рассчитывать на то, что Finalize() будут вызываться в каком-то определенном порядке для различных экземпляров класса. 2) Не рекомендуется реализовывать метод Finalize() , если только класс действительно не нуждается в нем. Если объект реализует Finalize() , это наносит сильный удар по производительности при сборке мусора для данного объекта. Кроме того, задерживается окончательное удаление объекта из памяти. Сборка мусора работает таким образом, что объекты, для которых необходимо вызвать метод Finalize() , помещаются в специальную очередь для завершения работы с ними. Сборщик мусора не уничтожает объекты, находящиеся в этой очереди. Вместо этого вызываются их методы Finalize() , и только потом они удаляются из очереди. Если вы действительно хотите определить метод Finalize() , то используйте синтаксис, который соответствует определению деструктора в C++: указывается имя класса с тильдой (~) перед ним: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Методы Dispose() и Close() являются скорее соглашением, чем частью языка C#, хотя в C# имеется некоторая встроенная поддержка Dispose() . Они работают таким образом, что при желании вы можете определить один из них для класса, понимая при этом, что клиентский код обязан явно вызвать этот метод для освобождения ресурсов. Ресурсы освобождаются сразу после того, как отпадает надобность в них, что является большим преимуществом при наличии, например, монопольной блокировки файла. Недостаток же заключается в том, что вы полагаетесь на то, что клиентский код будет вести себя корректно и вызовет этот метод, однако этого может и не произойти. Типичное решение — использовать Dispose() и Close() совместно с Finalize() . Необходимо сделать следующее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Если клиентский код не забудет вызвать Dispose() , ресурсы будут освобождены вовремя. Если же забудет, то Finalize() будет вызван при сборке мусора. Метод SuppressFinalize() из класса System.GC информирует среду исполнения .NET о том, что для объекта, переданного в качестве параметра, не нужно вызывать Finalize() . Разница между Close() и Dispose() состоит главным образом в соглашении по их применению. Close() предполагает, что ресурс может быть позже открыт снова, в то время как вызов Dispose() означает, что клиент закончил работу с этим конкретным ресурсом навсегда. Можно реализовать как один, так и оба метода, но не запутайте других разработчиков. Вы можете реализовать Close() в ситуациях, в которых этот метод является традиционной практикой программирования и соответствует традиционной терминологии — например, закрытие файла или соединения с базой данных. Dispose() следует применять, например, для освобождения дескрипторов различных объектов GDI или Windows. Этот метод потребуется также в том случае, если вы пожелаете воспользоваться преимуществами архитектуры IDisposable . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2004, 19:40 |
|
||
|
|

start [/forum/topic.php?fid=20&fpage=1036&tid=1439574]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 361ms |

| 0 / 0 |
