![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
Господа, обьясните мне,недалекому, что аткое конструктор-деструктор ,для чего он нужон и как им юзаться плиз. К Троелсону не отсылать=)
Добавлено @ 12:53 В чем различие между статическим конструктором констурктором ,конструктором с параметрами и как использовать статический конструктор в качестве счетчика обьектов? --------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Pitc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 9.5.2005 Где: Минск Репутация: нет Всего: 2 |
Конструктор по умолчанию выделяет память и инициализирует объект, в C# конструктор присваевает данным значения по умолчанию, чаще всего 0.
В большинстве случаев класс снабжен и другими конструкторами принимающими праметры. Использование такого конструктора самы простой способ инициализировать состояние объекта в момент его создния, установив нужные значения. Назначение статических конструкторов- присваивать начальные значения статическим переменным. |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
Маленькая просьба---приводите примеры с кодом плииз=)
тока не очень сложные а на уровне-- вот тут мы передали конструктором параметры и т д=) --------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Pitc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 9.5.2005 Где: Минск Репутация: нет Всего: 2 |
Использование статического конструктора:
Дапустим нуна чтоб статической переменной color всегда при создании присваевалось значение black.
Это сообщение отредактировал(а) Pitc - 1.5.2006, 13:21 |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
гм а почему нельзя то же самое через метод сделать??
примерно так:
--------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Pitc |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 9.5.2005 Где: Минск Репутация: нет Всего: 2 |
Вообще я у тебя метода не вижу..
Добавлено @ 13:54 Если использовать метод ,то потом его надо будет вызвать перед использованием переменной color, а уже потом обращаться к переменной. |
|||
|
||||
| Сарт |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 159 Регистрация: 29.4.2006 Репутация: 1 Всего: 0 |
упс ступил
public class NewClass { ///..... public void Colour() { public string color; color="black"; Console.WriteLine("Цвет ремешка"+colour); } ///..... } public static int Main(string[] args) { NewClass c1= new NewClass(); c1.Colour } --------------------
[color=purple][/color]Died.Of course, System.StackOverflow |
|||
|
||||
| Wanderer2019 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 937 Регистрация: 3.12.2004 Где: Санкт-Петербург/П рага Репутация: 7 Всего: 17 |
деструктор - есть понятие обратное конструктору. т.е. освобождает память. Не знаю насколько он необходим в C#, но вот в C++ он использовался для освобождения памяти выделяемой под определенные поля объекта. т.к. деструктор по умолчанию этого не делал. Соответсвенно ты можешь и не описывать не конструкто ни деструктор, тогда шарп сам проинициализирует все поля для создаваемого объекта (значениями типа null или 0), однако здесь могу возникнуть проблемы в случае если в качестве полей у тебя выступают например массивы и т.п., тогда при обращении к полю объекта через какой либо метод компилятор ругнется что значение данной переменной неопредлено.
|
|||
|
||||
| ivashkanet |
|
||||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Значит так. Все что написано сверху верно, но хочу вставить свои пять копеек.
Назначение конструкторов -- проводить начальную инициализацию объекта. Все равно какую. Деструктора -- высвобождение ресурсов, которые не может высвободить сборщик мусора, после удаления объекта. Например закрытие открытых файлов. Так не пойдет, color="black"; -- это инструкция (комманда) она не может быть написана вне метода. Выскочит ошибка этапа компилирования, но значение полю можно присвоить и по-другому:
Где ее инициализировать -- вопрос вкуса Другой пример: в конструкторе формы-по-умолчанию присутствует метод InitializeComponent(); , который расставляет контролы на форме, накиданные нами в дизайнере.
Не только. Статический конструктор вызываеться один раз, перед созданием самого первого экземпляра класса. Он нужен, например, для инициализации констант класса. Ведь они имееют тип того же класса, а экземпляров его еще нет Класс описывающий рациональные числа и его статический конструктор:
Назначение конструктора с параметрами нужно для более удобного присвоения значений полям нового класса. А для класса Rational подругому и нельзя только:
Что еще осталось? А! Как вести подсчет количества объектов: Нужно статическое (общее на все классы) поле counter. И увеличивать его на 1 при каждом создании нового объекта:
P.S. И еще конструктор без параметров свегда вызывается самым первым в конструкторе с параметром (могу ошибаться, но по-моему так оно и есть) |
||||||||||||
|
|||||||||||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Во-первых, в C# деструкторов нет, а есть финализаторы, по недоразумению обладающие синтаксисом деструкторов. Во-вторых, для высвобождения unmanaged ресурсов существует паттерн IDisposable и финализаторы писать обычно не рекомендуется. Добавлено @ 20:06
Если явно не указан — не вызывается. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Знать ничего не знаю, вот что напиано в MSDN про destructors:
А что, если я открываю 1 несчастный файл мне для его корректного закрытия переписывать все методы IDisposable. И не подумаю Да, не вызывается. А с чего я это взял ... P.S. В двух словах о деструкторе -- это такой зверь который вызывается самым последним при уничтожении объекта. |
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Зря. Спорить не буду, почитай у Рихтера про завершение и вот эту статью. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Только что глянул Idisposable, в нем оказался всего 1 метод Dispose(). Наследовать его можно, не страшно.
Но вот когда он вызывается? Вручную -- не интересно Кстати. В MSDN в примере к статье про Idisposable метод Dispose() вызывается примо из деструктора
оптимален для читаемости и отладки |
||||
|
|||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
Полуавтоматически — с помощью using-блоков. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Спасибо за статью, заставляет задуматься. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |