Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2016, 16:09   #1
vinniepooh
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 440
Радость Форма и классы

Привет.
Вопрос такой - почему форма в классическом приложении рассматривается как класс?
Почему это отдельный класс, а не экземпляр класса Form?

Ведь она существует в отдельном экземпляре, то есть в единственном.

То же самое и Program. Программа одна - почему тут целый класс, ведь это не несколько программ, а одна.
vinniepooh вне форума Ответить с цитированием
Старый 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
vinniepooh
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 440
По умолчанию

1) Спасибо. В данном случае класс уже не только тип объектов (однотипные объекты), но и хранилище для методов? Не теряется ли смысл определения?

2) Да, где-то в коде видел Form1 : Form. просто подумал, что в этом случае уже это 2-ая, 3-ая форма, но не Form1 сама по себе. То есть, для нового типа форм это подходит - форма с лейблом Form1, так? В отличие от Form просто. В этом разница?
vinniepooh вне форума Ответить с цитированием
Старый 27.08.2016, 20:07   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

1)нет не теряется, если вспомнить что такое статические классы и статические методы.
2)основная разница это ваш код в этом классе, +
обратите внимание на конструктор.
перейдите в тот метод, вы увидите разницу что от вас скрывает редактор.

мы бы могли генерировать код, который сможет создать лишь одну форму, но он будет иметь ту же нагрузку, и нам придется писать костыли, чтоб создать две одного типа.
так зачем?
Цитата:
просто подумал, что в этом случае уже это 2-ая, 3-ая форма, но не Form1 сама по себе.
если вы показали вторую форму, то это будет просто второй экземпляр Form1, но не Form2.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2016, 12:51   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 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.
OmegaBerkut вне форума Ответить с цитированием
Старый 28.08.2016, 15:32   #6
vinniepooh
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 440
По умолчанию

А почему, к примеру, форма не является экземпляром System.Windows.Forms.Form, а именно наследником? Тут, кстати, 2 раза форма. По идее это есть в МСДН, но не мешало бы уточнить ).

Ну как бы хранилище для методов и тип данных - немного разные вещи.
Статические - да, это те, которые могут быть вызваны без создания экземпляра класса (объекта).
vinniepooh вне форума Ответить с цитированием
Старый 28.08.2016, 15:45   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
А почему, к примеру, форма не является экземпляром System.Windows.Forms.Form, а именно наследником?
Вам же уже сказали: потому что там пустая, абсолютно пустая форма, шаблон, ...

Цитата:
Тут, кстати, 2 раза форма.
А если быть чуть внимательней? Можете глянуть в словарь и убиться, что Forms и Form это немного разные слова.

Цитата:
Ну как бы хранилище для методов и тип данных - немного разные вещи.
Ну как бы класс и объект класса - немного разные вещи... или вы о чем-то своем?
p51x вне форума Ответить с цитированием
Старый 28.08.2016, 15:45   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Тут, кстати, 2 раза форма.
в указанном имени класса форма один раз звучит.
Цитата:
А почему, к примеру, форма не является экземпляром System.Windows.Forms.Form, а именно наследником?
и куда вы тогда будете свой код писать?
Цитата:
Ну как бы хранилище для методов и тип данных - немного разные вещи.
Статические - да, это те, которые могут быть вызваны без создания экземпляра класса (объекта).
ну так класс Program по сути и нужен чтоб в нем был метод Main()
в MS решили что точка входа должна быть максимально чистой.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2016, 22:36   #9
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

vinniepooh
Что бы стать экземпляром любому не статическому типу данных - необходимо выполнить инициализацию (new, выделение памяти) в конкретную переменную, или при передаче параметра в функцию.
Вы так же можете написать
Код:
Int32 /*он же просто int*/ lol=new Int32();
Только толку от этого будет ровно никакого.
Класс - это по сути набор инструкций, которые описывают поведение экземпляра (объекта) класса. Так устроен C#, да и ООП как таковое.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
и куда вы тогда будете свой код писать?
Наверное он собирается ковырять исходники, которые Microsoft недавно открыла.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 28.08.2016 в 22:45.
OmegaBerkut вне форума Ответить с цитированием
Старый 30.08.2016, 14:42   #10
vinniepooh
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 440
По умолчанию

А кто может пояснить, почему нам вообще необходимо помещать метод в класс?

Код:
Ну как бы класс и объект класса - немного разные вещи... или вы о чем-то своем?
ну вот в этом контексте класс Program (программа) не вписывается в это определение. Объекта программа нет - класс статический, хотя он на самом деле есть.

Код:
ну так класс Program по сути и нужен чтоб в нем был метод Main()
в MS решили что точка входа должна быть максимально чистой.
а почему нельзя было просто сделать, без класса? только соглашение или в этом есть какой-то спец. смысл?


От модератора:
Пользуйтесь кнопкой , не нужно плодить несколько сообщений подряд.

Последний раз редактировалось Пепел Феникса; 30.08.2016 в 14:58.
vinniepooh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
классы в 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