|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.08.2016, 16:09 | #1 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
Форма и классы
Привет.
Вопрос такой - почему форма в классическом приложении рассматривается как класс? Почему это отдельный класс, а не экземпляр класса Form? Ведь она существует в отдельном экземпляре, то есть в единственном. То же самое и Program. Программа одна - почему тут целый класс, ведь это не несколько программ, а одна. |
27.08.2016, 18:07 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
1)Program рассматривается как хранилище метод Main, вы можете добавить туда еще методы, можете его даже создать, но изначально работа идет внутри класса, а не объекта(обратите внимание, Main статический метод)
2)а вам никто не запрещает создать еще пару раз эту форму. напишите в форме new Form1().Show() и из будет две. экземпляр класса Form у вас итак есть, но разве вам устроит пустая форма? вы же расширяете ее, не та ли? PS: в дотнете толком существовать метод вне класса не может. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.08.2016, 19:00 | #3 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
1) Спасибо. В данном случае класс уже не только тип объектов (однотипные объекты), но и хранилище для методов? Не теряется ли смысл определения?
2) Да, где-то в коде видел Form1 : Form. просто подумал, что в этом случае уже это 2-ая, 3-ая форма, но не Form1 сама по себе. То есть, для нового типа форм это подходит - форма с лейблом Form1, так? В отличие от Form просто. В этом разница? |
27.08.2016, 20:07 | #4 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
1)нет не теряется, если вспомнить что такое статические классы и статические методы.
2)основная разница это ваш код в этом классе, + обратите внимание на конструктор. перейдите в тот метод, вы увидите разницу что от вас скрывает редактор. мы бы могли генерировать код, который сможет создать лишь одну форму, но он будет иметь ту же нагрузку, и нам придется писать костыли, чтоб создать две одного типа. так зачем? Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
28.08.2016, 12:51 | #5 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
Всё очень просто: C# - это объектно-ориентированный язык программирования. Тут даже базовые типы являются классами (Int32, Int64, Boolean, ...).
А если конкретно по вашему вопросу - то он поставлен некорректно: ваша форма (имя которой, например, Form1) является наследником класса System.Windows.Forms.Form. Экземпляром класса форма становится только тогда, когда вы инициализируете переменную этого класса; например - Form1 myform=new Form1(); После вызова метода myform.Show(); ваша форма будет отображена на экране.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 28.08.2016 в 13:06. |
28.08.2016, 15:32 | #6 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
А почему, к примеру, форма не является экземпляром System.Windows.Forms.Form, а именно наследником? Тут, кстати, 2 раза форма. По идее это есть в МСДН, но не мешало бы уточнить ).
Ну как бы хранилище для методов и тип данных - немного разные вещи. Статические - да, это те, которые могут быть вызваны без создания экземпляра класса (объекта). |
28.08.2016, 15:45 | #7 | |||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
Цитата:
Цитата:
|
|||
28.08.2016, 15:45 | #8 | |||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Цитата:
Цитата:
в MS решили что точка входа должна быть максимально чистой. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|||
28.08.2016, 22:36 | #9 |
Спокойный псих
Участник клуба
Регистрация: 19.03.2013
Сообщений: 1,538
|
vinniepooh
Что бы стать экземпляром любому не статическому типу данных - необходимо выполнить инициализацию (new, выделение памяти) в конкретную переменную, или при передаче параметра в функцию. Вы так же можете написать Код:
Класс - это по сути набор инструкций, которые описывают поведение экземпляра (объекта) класса. Так устроен C#, да и ООП как таковое. Наверное он собирается ковырять исходники, которые Microsoft недавно открыла.
Подпись ? Не, не слышал ...
Последний раз редактировалось OmegaBerkut; 28.08.2016 в 22:45. |
30.08.2016, 14:42 | #10 |
Форумчанин
Регистрация: 11.04.2010
Сообщений: 440
|
А кто может пояснить, почему нам вообще необходимо помещать метод в класс?
Код:
Код:
От модератора: Пользуйтесь кнопкой , не нужно плодить несколько сообщений подряд. Последний раз редактировалось Пепел Феникса; 30.08.2016 в 14:58. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
классы в C++ | baizhik_street | Общие вопросы C/C++ | 4 | 27.11.2011 18:35 |
классы | настюх | Visual C++ | 0 | 12.11.2011 18:23 |
ПЕрвая форма, кликая по кнопке, другая форма | Nadej | C++ Builder | 0 | 02.10.2011 17:58 |
классы | elenSV | Помощь студентам | 0 | 01.05.2009 19:33 |