|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
Вопрос , собственно, не по языку, а по организации большого проекта, которого еще нет. :) Пару дней назад начал изучать и писать проект на C#. Некогда, что было давно и уже неправда, неплохо знал и работал с С++. Пару пректов сделал на VB.NET. С C# возникли сложности с организацией. 1. Создаем проет Windows Form. Получается, что остальные классы порождаются формой. Полагаю, что это не есть оч. хорошо. Но если сделать класс с функцией Main(), и оттуда запускать форму возникают проблемы (сложности) с обменом данными формы с другими классами, исполняемыми вне контекста формы. 2. Нужно где-то определить-объявить типы данных проекта и глобальные переменные, используемые во всем проекте. Не в форме же это делать. В VB.NET делал модуль и там размещал все объявления типов и глобальных переменных. Header файлов нет, и в using их вроде не пришьешь. В общем, как правильно и логично организовать структуру проекта? "Есть многое на свете, друг Горацио, что и не сразу в голову придет." М. Твен "Приключения Геккельбери Финна" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:07 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
про static класс что ли спрашиваешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:10 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBA...1. Создаем проет Windows Form. Получается, что остальные классы порождаются формой.... Чего бы это вдруг?! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:18 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
Скорее про иерархию. Как ее строить? ИМХО, не рацо когда основная программа исполняется в потоке формы, а организация и управление др. потокоми тоже осуществляется из потока формы. Да, а static class разве отменяет префиксы к типам данных при использовании в др. классах? Да и непонятно как передавать события в программе в форму, если она (форма) прицеплена где-то сбоку. В общем, надо с самого начала грамотно выстроить иерархию. С С++ b VB.NET как-то попроще было. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:27 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
LexxxxxYUBA...1. Создаем проет Windows Form. Получается, что остальные классы порождаются формой.... Чего бы это вдруг?! Ну, создаются из формы. Я не про наследование. А как иначе, если старт программы идет создание формы. Main() нет. Или где-то закопана в авто-создаваемом коде? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:32 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBA1. Создаем проет Windows Form. Получается, что остальные классы порождаются формой. Полагаю, что это не есть оч. хорошо. Если под "порождением классов" ты имеешь в виду создание их экземпляров, то улучшить ситуацию можно путем использоания паттеррнов MVC, MVP, MVVM и т.п. YUBAНо если сделать класс с функцией Main(), и оттуда запускать форму возникают проблемы (сложности) с обменом данными формы с другими классами, исполняемыми вне контекста формы. У тебя в проекте и так уже есть функция Main запускающая форму так что вопрос непонятен. YUBA2. Нужно где-то определить-объявить типы данных проекта и глобальные переменные, используемые во всем проекте. Не в форме же это делать. В VB.NET делал модуль и там размещал все объявления типов и глобальных переменных. Header файлов нет, и в using их вроде не пришьешь. Модуль VB.NET эквивалентен static классу в C#. В нем можно разместить глобальные данные, но классы лучше объявлять в отдельных файлах. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:38 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBAСкорее про иерархию. Как ее строить? ИМХО, не рацо когда основная программа исполняется в потоке формы, а организация и управление др. потокоми тоже осуществляется из потока формы. В общем, надо с самого начала грамотно выстроить иерархию. Какая связь между потоками и иерархией наследования? YUBAДа и непонятно как передавать события в программе в форму, если она (форма) прицеплена где-то сбоку. Объявляешь класс с событием и кодом генерирующим это событие. В форме создаешь экземпляр этого класса (или передаешь его конструктору форму), подписываешься на нужное событие. Обрабатываешь его. YUBAДа, а static class разве отменяет префиксы к типам данных при использовании в др. классах? Какие еще префиксы? Имя класса что-ли? Нет, не отменяет - таковы правила языка. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 18:50 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBA... А как иначе, если старт программы идет создание формы. Main() нет. Или где-то закопана в авто-создаваемом коде? Речь точно идет про C#, или все таки про VB.NET?! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 20:09 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
О С#. Main() нашлась. :) Была закопана в автокоде. В самом "Полном руководстве по C#" об этом вообще ничего. И о многом другом тоже. :) А ведь около 1000 страниц. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 20:51 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBAО С#.Main() нашлась. :) Была закопана в автокоде.... Ну не такой уж это и автокод! Попробуйте включите отображение скрытых файлов проекта и используйте какой нибудь инструментец на подобие ServiceModel Metadata Utility или чего-то подобного. Вот там Вам покажут настоящий автокод! ) А Program.cs это просто шаблонный файл, отправная точка, и всего-то. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 20:59 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
Lexxxxx, имелся в виду автоматически сгенирированный. А скрытые, да включил. Как-то из головы вылетело. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 21:07 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
Пришел к выводу, что надо делать базовый класс проекта, и остальные базовые классы наследовать от него. Тогда глобальные типы, функции и константы будут непосредственно доступны без префиксов. Практически, вместо header файла. //Кстати, можно-ли некий класс использовать в using <Class>? Незя. "Класс не является пространством имен..." 1.Форме(ам) передать интерфейс базового класса. Это сработает? В плане доступа. 2.Пока не понимаю, куда деть глобальные переменные? В С++ я как-то это делал, что было давно, и неправда. :) Ну да, какой нибудь отдельный класс заведу для этих целей. Финт со static классом с этой целью не прокатил. Среда ругается, не понял на что. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 02:11 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBAПришел к выводу, что надо делать базовый класс проекта, и остальные базовые классы наследовать от него. Тогда глобальные типы, функции и константы будут непосредственно доступны без префиксов. Практически, вместо header файла. Делать базовый класс нужно когда есть общая функциональность, а не общий набор всего подряд. Типы и так доступны всем классам в проекте. Функции выносим в базовый класс, если предполагается наличие типов с общей функциональностью, или создаем static класс, или используем extension методы. С константами по аналогии. YUBAбудут непосредственно доступны без префиксов. Практически, вместо header файла. Дались тебе эти "префиксы". Кроме того ты напрасно пытаешься переносить идеологию C++ в C#. Это совершенно разные языки. YUBA//Кстати, можно-ли некий класс использовать в using <Class>? Незя. "Класс не является пространством имен..." using нужен чтобы не набирать полные имена классов, а не для того чтобы избавиться от "префиксов". YUBA1.Форме(ам) передать интерфейс базового класса. Это сработает? В плане доступа. Что значит передать интерфейс базового класса? Зачем вообще это делать когда наследник и так имеет доступ ко всей protected/public функциональности базового класса? YUBA2.Пока не понимаю, куда деть глобальные переменные? В С++ я как-то это делал, что было давно, и неправда. :) Тебе уже ответили - используй static класс. YUBAНу да, какой нибудь отдельный класс заведу для этих целей. Финт со static классом с этой целью не прокатил. Среда ругается, не понял на что. Приведи код и ошибку. P.S. Твоя главная проблема - плохое знание языка. Отсюда все трудности. Читай Рихтера CLR via C#. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 02:49 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
YUBAПрактически, вместо header файла.В C# наиболее близкий аналог - интерфейсы. YUBA//Кстати, можно-ли некий класс использовать в using <Class>? Незя. "Класс не является пространством имен..." using MyClass = MyNamespace.MyClass; Но, имхо, это нужно в основном для разрешения конфликтов. И, то, фиг знает. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 06:42 |
|
C#. Организация пректа.
|
|||
---|---|---|---|
#18+
bazileP.S. Твоя главная проблема - плохое знание языка. Отсюда все трудности. Читай Рихтера CLR via C#. Книгу найду, спасибо. То правда. 5-й день пошел как с ним работаю. Пока единственная книга "Уотсон К., Нейгел К., Педерсен Я.Х., Рид Дж., Скиннер М. Visual C# 2010 полный курс ". Средней паршивости книга. Ну да MSDN есть, если-б знать что искать. :) bazileДались тебе эти "префиксы". Кроме того ты напрасно пытаешься переносить идеологию C++ в C#. Это совершенно разные языки.А ведь правда. Как-то зациклился на этом. Похоже сам создаю себе сложности. Действительно, не надо этого делать. Static классы где нибудь в сторонке и даже интересней получится. bazileПриведи код и ошибку.Ошибка выполнения. Без static в том же виде все ОК. Проба пера была, уже удалил. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 11:49 |
|
|
start [/forum/topic.php?fid=20&msg=38063411&tid=1405548]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
88ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 188ms |
0 / 0 |