| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Вопросы по С# |
| Автор: Сарт 1.5.2006, 12:47 |
| Господа, обьясните мне,недалекому, что аткое конструктор-деструктор ,для чего он нужон и как им юзаться плиз. К Троелсону не отсылать=) Добавлено @ 12:53 В чем различие между статическим конструктором констурктором ,конструктором с параметрами и как использовать статический конструктор в качестве счетчика обьектов? |
| Автор: Pitc 1.5.2006, 13:03 |
| Конструктор по умолчанию выделяет память и инициализирует объект, в C# конструктор присваевает данным значения по умолчанию, чаще всего 0. В большинстве случаев класс снабжен и другими конструкторами принимающими праметры. Использование такого конструктора самы простой способ инициализировать состояние объекта в момент его создния, установив нужные значения. Назначение статических конструкторов- присваивать начальные значения статическим переменным. |
| Автор: Сарт 1.5.2006, 13:09 |
| Маленькая просьба---приводите примеры с кодом плииз=) тока не очень сложные а на уровне-- вот тут мы передали конструктором параметры и т д=) |
| Автор: Pitc 1.5.2006, 13:20 | ||
| Использование статического конструктора: Дапустим нуна чтоб статической переменной color всегда при создании присваевалось значение black.
|
| Автор: Сарт 1.5.2006, 13:42 | ||
| гм а почему нельзя то же самое через метод сделать?? примерно так:
|
| Автор: Pitc 1.5.2006, 13:50 | ||
Вообще я у тебя метода не вижу..
Добавлено @ 13:54 Если использовать метод ,то потом его надо будет вызвать перед использованием переменной color, а уже потом обращаться к переменной. |
| Автор: Сарт 1.5.2006, 14:23 |
| упс ступил 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 } |
| Автор: Wanderer2019 1.5.2006, 16:15 |
| деструктор - есть понятие обратное конструктору. т.е. освобождает память. Не знаю насколько он необходим в C#, но вот в C++ он использовался для освобождения памяти выделяемой под определенные поля объекта. т.к. деструктор по умолчанию этого не делал. Соответсвенно ты можешь и не описывать не конструкто ни деструктор, тогда шарп сам проинициализирует все поля для создаваемого объекта (значениями типа null или 0), однако здесь могу возникнуть проблемы в случае если в качестве полей у тебя выступают например массивы и т.п., тогда при обращении к полю объекта через какой либо метод компилятор ругнется что значение данной переменной неопредлено. |
| Автор: Void 1.5.2006, 20:03 | ||||
Во-первых, в C# деструкторов нет, а есть финализаторы, по недоразумению обладающие синтаксисом деструкторов. Во-вторых, для высвобождения unmanaged ресурсов существует паттерн IDisposable и финализаторы писать обычно не рекомендуется. Добавлено @ 20:06
Если явно не указан — не вызывается. |
| Автор: ivashkanet 1.5.2006, 21:38 | ||||
Знать ничего не знаю, вот что напиано в MSDN про destructors:
А что, если я открываю 1 несчастный файл мне для его корректного закрытия переписывать все методы IDisposable. И не подумаю Да, не вызывается. А с чего я это взял ... P.S. В двух словах о деструкторе -- это такой зверь который вызывается самым последним при уничтожении объекта. |
| Автор: Void 1.5.2006, 21:48 | ||
Зря. Спорить не буду, почитай у Рихтера про завершение и http://gzip.rsdn.ru/article/dotnet/GCnet.xml статью. |
| Автор: ivashkanet 1.5.2006, 22:01 | ||||
| Только что глянул Idisposable, в нем оказался всего 1 метод Dispose(). Наследовать его можно, не страшно. Но вот когда он вызывается? Вручную -- не интересно Кстати. В MSDN в примере к статье про Idisposable метод Dispose() вызывается примо из деструктора
оптимален для читаемости и отладки |
| Автор: Void 1.5.2006, 22:04 |
Полуавтоматически — с помощью using-блоков. |
| Автор: ivashkanet 1.5.2006, 22:30 |
Спасибо за статью, заставляет задуматься. |
| Автор: Сарт 3.5.2006, 20:19 |
| Народ, разрешите прервать вашу столь увлекательную беседу, но у меня возник вопрос. КУДА писать деструктор при создании счетчика объектов? Ведь его.как подсказывает мне логика, нужно каким то образом не только увеличивать,но и уменьшать....Пример:Создан объект, создан 2-ой. Счетчик показывает 2. 1 объект удалили,но счетчик то все равно покажет 2=)) Помогите плиз,и куджа писать деструктор??... Могу выложить код но он несколько..сумбуренЮ,что ли?? |
| Автор: ivashkanet 3.5.2006, 20:42 | ||
Да, эт я ломанулся. А вопрос даже не КУДА, а КАК писать деструктор
|
| Автор: Void 3.5.2006, 20:48 | ||
Проблема в том, что заранее неизвестно, когда сборщик мусора подберет объект. Время жизни объектов в .NET недетерминированно, так что не удивляйся, что счетчик будет сбрасываться с некоторым запозданием. |
| Автор: Сарт 3.5.2006, 23:18 | ||
Создать деструктор класса,
Народ расшифруйте фразу |
| Автор: mr.DUDA 4.5.2006, 12:15 |
Деструктор вызывается автоматически сборщиком мусора. Для тебя это означает: время ,когда деструктор будет вызван, неизвестно. Хоть через минуту, хоть через две. Притом, что ссылок на объект уже давно 0. |
| Автор: Сарт 4.5.2006, 23:07 | ||||
| Сегодня пристал к преподу довел его этим вопросом....Итак внимание,правильный ответ!!!!!!! фраза
Означает...что бы вы подумали?? А не что иное как код вида:
Я плакалЪ... |
| Автор: ivashkanet 5.5.2006, 09:46 | ||
В топку твоего препода Номер раз: Деструкторы одычно имеют private модификатор и поэтому вызвать его из кода вне класса невозможно. Номер два: Деструктор не уничтожает объект (действительно слово для него неправильное выбрали, лучше уж финализатор), а только делает предварительные действия перед удалением объекта. Номер три: если уж хочешь сам удалить объект нужно делать так: Убираешь все с него ссылки, и дважды
|
| Автор: Сарт 5.5.2006, 13:47 |
| Пасиб,чувствую сча прочитаю Троелсона страниц 20 и снова какой нить мелкий вопрос задам=)) |
| Автор: Сарт 5.5.2006, 15:52 | ||||
| Вопрос возник УЖЕ=) Итак вот код:
А вопрос следующий,почему при выходе из проги(если надо могу выложить код с Маина, фраза
выводиться 2!! раза?? |
| Автор: ivashkanet 5.5.2006, 15:58 |
| Сарт, очисти код от всего лишенего. Читать же невозможно. А какой метод вызывает функция main |
| Автор: Сарт 5.5.2006, 16:18 | ||
| Гм а что там лишенго то?? комментарии??=) а вот код с маином
Но поскольку тут нету конструктора то думаю не из за этого=)) А,это лаба,поэтому лишенго нету=)) Или я не прав?? |
| Автор: ivashkanet 5.5.2006, 16:21 | ||
Сарт,
1 раз строка выкакивает, а если два объекта создам, то 2 раза Добавлено @ 16:26 Ты ж два объекта создаешь, вот он и вызывается по разу для каждого P.S. Все лишнее, это код не относящийся к делу. Вот у меня код без всего лишнего Добавлено @ 16:28 Комментарии никогда лишними не бывают |
| Автор: Сарт 5.5.2006, 16:33 |
| Ясненько,пасиб......сча дальше буду делать=) |
| Автор: Сарт 6.5.2006, 20:30 |
| Ребята!! Расскажите про композицию и агрергацию, что это такое?? Знаю тока что там отличается типом доступа к чему-то там.... Расскажите, как и что там?? |
| Автор: Сарт 7.5.2006, 11:33 |
| Что?? Неужели никто не знает?? |
| Автор: Pitc 7.5.2006, 11:46 |
| Насколько я помню композиция это когда к классу закрытому для наследования обращются через объект этого класса... |
| Автор: Сарт 7.5.2006, 12:32 |
| Егор е-мое какое наследование во 2-ой лабе???? Во второй лабе у нас не то немного=)). Давай рассказывай по человечески+разницу свойства-метода и что есть поле=) |
| Автор: Pitc 7.5.2006, 14:15 | ||
Свойства используются для обращения к закрытым членам класса.
Книгу почитай...!!! |
| Автор: Сарт 7.5.2006, 15:09 | ||
Дай книгу=)в Троелсоне нету=)
слово Int всмысле int? а как насчет поля для енума?? кстати обьясни словами что есть поле а что есть свойство.... |
| Автор: Сарт 8.5.2006, 22:52 |
| Народ че никто не нает?? |
| Автор: nikitao 8.5.2006, 23:42 |
| Поле-это пременная-член класса,а свойство-это тоже поле,но для которого определены get или(и) set. Добавлено @ 23:52 Int32==int,а просто Int вроде нет. Добавлено @ 23:56 С enumaми также работать как и с обычными свойствами. |
| Автор: Exception 9.5.2006, 00:25 |
| Модератор: кхе-кхе.. Одна тема - один вопрос! P.S. nikitao, приветствую на форуме дотнетчиков |
| Автор: Pitc 9.5.2006, 02:07 | ||||||
nikitao,
Свойство это метод , а не переменная, с помощью которого осуществляется доступ к закрытым переменным.
Я просто описался . Exception,
Если Сарт, будет для каждого вопроса создавать новую тему , то это будет выглядеть как спам форума. Пускай лучше здесь пишет.. Тем более у темы вроде название подходящие Вопросы по С# |
| Автор: Exception 9.5.2006, 02:35 |
| Ну уж нет. Пусть выделит группы вопросов и задаёт. А с элементарными можно и самому разобраться. |
| Автор: nikitao 9.5.2006, 12:07 | ||
Exception, пасибо.
Т е свойством мы называем сами get и set для поля |
| Автор: Сарт 9.5.2006, 13:27 |
| Уважаемый Exception представьте что вы читаете книгу,возник 1 вопрос--разъяснили,задали второй-опять таки....как тут мона в группы то организовать? Лучше сделать эту тему верху и обозвать типа новичкам=)) |
| Автор: Pitc 9.5.2006, 14:34 | ||||
nikitao,
Термин поле используется для переменных объявленных с ключевым словом public.
Свойство представляет объеденение данных и методов в одно целое. Внешнее обращение к свойству анологично обращению к полю. В общем случае свойство состоит из 2 скрытых методов. |
| Автор: Exception 9.5.2006, 15:01 |
| Просто эта тема со временем превратится в свалку. А поле - это любая переменная уровня класса, независимо от области видимости. |
| Автор: Сарт 9.5.2006, 16:36 |
| Ну, будем надеяться что не превратиться,просто это мой как бы учебный курс=) Зато в след раз когда ктото захочет научиться ,он всегда сможет зайти сюда и наверняка у него будут те же вопросы. |
| Автор: Tito 12.5.2006, 01:40 |
| Сарт, Внимательно почитай того же Троелсена...книга отличная с толковыми примерами....там ответы на все твои несложные вопросы |
| Автор: Mymik 12.5.2006, 21:52 | ||
Народ... помогите чем сможете :о)
собственно говоря в конструктор данного класса передается typeof от пространства имен :о)... Но хочется как-то сделать так, чтобы можно было спрашивать у пользователя пространство имен, в котором он хочет вытащить все методы и их значения. Тобишь передавать строчку... но вопрос, как тогда взять typeof от значения, которое храниться в строчке, да еще и преобразовать его как-то в указатель на пространство имен :о) гы, сам не понял что сказал... Ваши варианты ;о)... ваши идеи :о)... |
| Автор: mr.DUDA 13.5.2006, 10:28 |
Type.GetType (строковое_имя_типа) Бери свой namespace и цепляй к нему имя типа. Сам по себе namespace (без типа) никакого смысла не имеет. |
| Автор: Сарт 13.5.2006, 15:02 |
| 2Тито Книга хреново отсканена,примеры конечно хорошие...но...да ладно... Тока вот в Троелсоне отличие метода от свойства(то что является базовым,как я считаю) на 151 странице...то есть книга не очень построена на мой взгляд=).... Народ кто знает книгу Либерти может она получше?? |
| Автор: Сарт 14.5.2006, 12:15 | ||||
| Народ снова вопрос есть! Итак, есть статический метод,но не хочет обьявляться как void +как с помощью return вернуть 2 значения?? Код как я выкрутился,но хочеться в 1 статическом методе все это сделать
и др класс
|
| Автор: Сарт 14.5.2006, 12:45 |
| Вариант сделать 1 переменную типа "12 November" не предлагать,неинтересно. |
| Автор: mr.DUDA 14.5.2006, 13:54 | ||
|
| Автор: Сарт 14.5.2006, 15:32 |
| Дуда,вроде как говорили уже=) Насчет вопроса--переформулирую. Хочу сделать в статическом методе 2 переменных-mounth и date. Потом из другого класса вызвать этот метод. Как это сделать? |
| Автор: VisualProgrammerNET 14.5.2006, 16:18 | ||
Мда...
|
| Автор: Сарт 14.5.2006, 17:30 |
| Ну тут пользователь может ввести херню типа месяц Бормордин и день кавалин. Хочется именно 2 переменных типа стринг. А не массив=) |
| Автор: ivashkanet 14.5.2006, 19:02 |
Сарт, функция возвращает только одно значение. Запомни. В каждом конкретном случае выкручиваются по разному. Чем тебе метод VisualProgrammerNET-а не устраивает Не хочешь массив, соединяй строка в одну и ставь посередине какой-нить хитрый символ, типа перевода строки. |
| Автор: Сарт 14.5.2006, 19:26 |
| Гм есть у меня 1 вариант тока не наю как реализовать..... Короче грубо говоря вывести в методе через 2 Console.WriteLine день и месяц, а потом как нить эти строки склеить и присвоить 1 переменной....и уже эту переменную возвращать..тока не знаю можно ли так сделать?? Может кто подскажет?? |
| Автор: ivashkanet 14.5.2006, 19:38 | ||||
Сарт, вот скажи, зачем я тебе ответ писал, чтоб ты опять спросил
|
| Автор: Сарт 14.5.2006, 20:08 |
| не ну ты мне писал словами,а у меня общение с миром исколючительно через код происходит...двоичный=))) Пасиб за помощь...Интересно препод заценит или нет?=) |
| Автор: ivashkanet 14.5.2006, 20:32 | ||
Препод очень даже заценит метод VisualProgrammerNET-а. А мой, если чесно, это извращение, вызванное твоим нежеланием использовать массивы. Добавлено @ 20:33
Что ты за программер такой, что не можешб слова воплотить в код. Я, например, именно такими словами и думаю, а потом перевожу их в код. ИМХО, большинство так делают. |
| Автор: mr.DUDA 14.5.2006, 22:47 |
| Сарт, либо выноси каждый вопрос в отдельную тему, либо закрываем это обсуждение. |