![]() |
Модераторы: diadiavova, gambit |
![]() ![]() ![]() |
|
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 1 Всего: 109 |
Привет!
Сегодня установил себе студию. Сижу читаю всяко разно... ТУТ много интересного. Но там при объяснении часто используется понятие класса... Раньше немного программировал на VB6. Но классы не использовал. Кто-нибудь сможет на пальцах объяснить для особо одарённых понятие класса? ![]() |
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: нет Всего: 5 |
Если уж совсем просто, то класс это шаблон, по образу и подобию которого можно создавать любое количество обьектов...
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
mihanik, давай конкретные вопросы.
Не хочешь же ты, чтобы мы тебе новую собственноручно написанную статью дали ![]() |
|||
|
||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: нет Всего: 25 |
Тебе нужно разобраться с теорией объектно ориентированного программирования, тогда все поймешь, что такое класс что такое экземпляр, и языки программирования для тебя будут различаться только синтаксисом.
Это сообщение отредактировал(а) Hidrag - 5.10.2006, 15:27 -------------------- ![]() |
|||
|
||||
DarkDragon |
|
||||||||||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
В VB.NET есть понятие класс и структура. Вот тока совсем не понимаю из чего состоит класс (с точки зрения самого процессора), но знаю как его кушать.
Структуры и классы в VB.NET могут содержать в себе функции(function/sub), переменные(variables), случаи(events), проперции(properties). Одно из отличий класса и структуры, это то что класс передается по ссылке, а структура по значению. Чтобы создать свой класс, много ума не требуется:
Public/Private/Protected/Friend - радиус видимости ![]() одно из причин реализации классов это унаследование. Чтобы унаследовать какой нибудь класс тебе нужно использовать ключевое слово Inherits
Конструктор в VB.NET, процедура New.
Чтобы использовать данные класса, нужно создать новый класс.
Но можно обойтись и без создания нового класса, если данные в классе обьявлены как Shared в VB, тоже что и static в C++, C#.
Ешо можно приделать интерфэйс. Но сам не доганяю для чего он нужен. Возможно Interface - это скелет класса? Или основа? А может что то и другое... Ну это не все что можно делать с классом. Если ты создашь Windows Application, то автоматически получишь форму Form1. Это как раз и есть класс, унаследующий класс Form. А если тебе нужна тока теорию, то прямо в MSDN. Тама се про класс и написано. |
||||||||||
|
|||||||||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Эй-эй, нет смысла изучать, как объявлять классы, если не знать теории ООП. Так ты только сделаешь хуже для самого себя.
А вообще, класс - это абстракция объекта реального мира, используемая в программе. |
|||
|
||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
Если мне память не отшибло, то в первые классы стали реализоваваться в C, а унаследования в C++. И при чем тут
понятие класс и ООП. Если я не ошибаюсь ООП использует класс как обьект, со всеми прилагающими услугами (Properties, Events, ....). |
|||
|
||||
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 1 Всего: 109 |
Хм...
Не могу понять, кто пометил данный вопрос, как решённый... ![]() Это, по крайней мере, не вежливо. По-моему, только человек поднявший вопрос может определить, решён вопрос или нет. Это как буд-то мне дали понять, что я тру-ля-ля негожее... Обидно, знаете ли! Добавлено @ 06:55 Спасибо, thomas и DarkDragon! Если будут появлятся вопросы, можно их задавать в письме? Это сообщение отредактировал(а) mihanik - 6.10.2006, 06:56 |
|||
|
||||
mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 1 Всего: 109 |
Кстати!
Вот ЗДЕСЬ (http://www.gotdotnet.ru/LearnDotNet/VBNET/125221.aspx) кое-что интересное написано про ООП и классы... |
|||
|
||||
Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
Интерфесы, насколько я понимаю для симмуляции множесвенного наследования, потому что в .Net-вских языках (не знаю как в C++, но в C# и в VB точно) класс не может быть наследником нескольких классов, зато он может реализовывать несколько интерфейсов. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
ivashkanet |
|
||||||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
Когда я только начал изучать C# мне попалось примерно такое объсянение:
Тогда оно мне было не очень понятно, а сейчас я считаю, что лучше его и не придумаешь. Пример:
Теперь можно создать метод, который будет "заставлять" считаться классы которые умеют это делать:
Либо можно объединять все объекты реализующие этот интерфейс в один масив и работать с ними всеми как с объектами одного типа:
Вот, в принципе, все про интерфейсы. |
||||||||||
|
|||||||||||
Exception |
|
||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Советую почитать, что такое класс. По сути, класс объявляется так:
Внутри класса могут находиться поля, методы, свойства и события. В полях хранят данные класса. Например, можно объявить класс Point, представляющий точку, и для хранения координат использовать поля X и Y:
Прекрасно, мы можем хранить данные. Но как быть с операциями, которые класс должен выполнять? Для объявления и реализации таких операций исполльзуются методы (также называемые процедурами или функциями).
Методы могут принимать параметры - они выглядят как локальные переменные, но передаются из внешнего кода. Могут они и возвращать значения внешнему коду - тогда вместо ключегого слова Sub указывается ключевое слово Function, а в конце приписывается As тип_возвращаемого_значения.
Использовать этот метод можно так:
Зачастую полей бывает вполне достаточно. А что если нужно как-то ограничить диапазон присваиваемых полям значений? Можно создать специальные функции, отвечающие за присваивание и возвращение значения поля, но проще воспользоваться встроенными средствами - свойствами. Обращение к свойству внешне не отличается от обращения к полю, разве что на самом деле выполняется дополнительный код:
События - более сложная тема, и для начала тебе следует понять всё вышесказанное. Далее, один класс может наследоваться от другого, расширяя его функциональность и при необходимости перепределяя её. Внимание: наследовать стоит только тогда, когда наследник моделирует отношение "is-a", то есть является какой-то разновидностью базового класса! Например, гипотетический класс Human (человек) мог бы наследовать от Animal (животное) или класс Triangle (треугольник) - от Figure (фигура), но нелогично наследовать квадрат от точки только потому что их определяют два числа - координаты у точки и длины сторон у квадрата. Треугольник является фигурой, но квадрат не является точкой. Это важно понять. Чтобы унаследовать от другого класса, необходимо употребить ключевое слово Inherits. По умолчанию все классы наследуют от System.Object.
Мы использовали в коде три новых модификатора. MustOverride указывает, что класс не реализует данный метод, а оставляет эту обязанность своим потомкам. Именно поэтому такой класс "без метода" создать с помощью оператора New нельзя - и он помечается как MustInherit. Потмки должны либо предоставить реализацию метода, либо также оставаться MustInherit. Все объекты можно привести к типу базового класса, хотя операции и разные для разных наследников. Пример:
Хотя, по сути, мы вызывали метод класса Animal, он был замещён своими переопределениями в классах Dog и Cat, и, как и ожидалось, код выводит на консоль
Всё, честно говоря, я немного устал сегодня, и если тебя заинтересовало всё это, советую сначала почитать о таких принципах ООП как инкапсуляция, полиморфизм, об абстрактных классах, а затем уже начинать применять всё это добро в VB .NET. Тогда и учить другие языки впоследствии будет существенно проще. |
||||||||||||||||||
|
|||||||||||||||||||
DarkDragon |
|
||||||||||||||||||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
Во! Exception обьяснил то что я написал, более понятно, и немного по подробнее. А что же ты про templates ничего не сказал? У меня в 2003 версии не подерживается в VB. Зато знаю что подерживается в 2005. Это даже видно из твоего примера.
Незнаю как другим, а мне можно. Еще лучше если на мою почту. Ну и на Vingrad'е(личный ящик) тоже можно ![]()
Точно. Если мы вкачестве параметра укажем interface, то можно будет передать любой класс, который поддерживает данный interface.
![]() Насчет ООП. Не смог прочесть на Wiki. Тупо грузит белый фон и замертво стоит(попробовал линк скачать через Downloader, скачал начало ![]() Добавлено @ 23:58 Во! Exception обьяснил то что я написал, более понятно, и немного по подробнее. А что же ты про templates ничего не сказал? У меня в 2003 версии не подерживается в VB. Зато знаю что подерживается в 2005. Это даже видно из твоего примера.
Незнаю как другим, а мне можно. Еще лучше если на мою почту. Ну и на Vingrad'е(личный ящик) тоже можно ![]()
Точно. Если мы вкачестве параметра укажем interface, то можно будет передать любой класс, который поддерживает данный interface.
![]() Насчет ООП. Не смог прочесть на Wiki. Тупо грузит белый фон и замертво стоит(попробовал линк скачать через Downloader, скачал начало ![]() Добавлено @ 23:59 Во! Exception обьяснил то что я написал, более понятно, и немного по подробнее. А что же ты про templates ничего не сказал? У меня в 2003 версии не подерживается в VB. Зато знаю что подерживается в 2005. Это даже видно из твоего примера.
Незнаю как другим, а мне можно. Еще лучше если на мою почту. Ну и на Vingrad'е(личный ящик) тоже можно ![]()
Точно. Если мы вкачестве параметра укажем interface, то можно будет передать любой класс, который поддерживает данный interface.
![]() Насчет ООП. Не смог прочесть на Wiki. Тупо грузит белый фон и замертво стоит(попробовал линк скачать через Downloader, скачал начало ![]() |
||||||||||||||||||
|
|||||||||||||||||||
DarkDragon |
|
|||
![]() GradVin ![]() ![]() Профиль Группа: Участник Сообщений: 296 Регистрация: 19.8.2006 Репутация: 5 Всего: 8 |
_____________
Не обращайте внимание на 3 добавки в мой ответ ![]()
Это происходит потому что, вызывается ошибка в mscorlib. Основной класс вызова: Exception. После инструкции Catch Ex As Exception. Вызывается Exception. Он резко смотрит вопрос, где поставил последний пост (на Vingrade=>.NET=>VB.NET), и помечает его как труе (Решенный = True). Тебе надо отправить письмо в мелкософт. Чтобы исправили баг ![]() ![]() Это Exception помечает сообщения как решенные. А вообщем не обращай на это. Не кто тебя не принемает за тру ля ля. Все когда-то начинали, и все когда-то что-то забывали.... |
|||
|
||||
Exception |
|
||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Ну привычка отмечать решённым
![]() Часто бывает необходимо объявить в коде список элементов:
![]() |
||||||||||||||
|
|||||||||||||||
![]() ![]() ![]() |
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |