![]() |
|
Модераторы: 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. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |