Конференция ".Net" » Зачем нужен partial class? [C#]
 
  • kaif © (24.10.07 17:22) [0]
    При создании нового визуального компонента в Microsoft Visual Studio система создает 2 файла: файл MyComponent.cs и файл MyComponent.Designer.cs.

    В обоих объявляется partial class MyComponent.

    Насколько я понял это есть некий способ разбить реализацию одного класса по двум файлам.

    Я правильно понял?

    Зачем это вообще нужно?
    Ведь C# (как описано в книжках) позволяет просто объявить класс-потомок компонента в одном файле и не париться. Зачем нужны два файла? Просветите ради бога... Я уже написал свой компонент Barcode (точнее перевел чужой с Object Pascal) и он полностью работает.
    И вот только сейчас обнаружил, что у меня здесь имеется два файла...

    Это обязательно должно быть так? И в чем тут фишка?
  • clickmaker © (24.10.07 17:45) [1]
    файл с собственно кодом (логикой) не засоряется объявлениями дочерних контролов и кодом их создания
  • clickmaker © (24.10.07 17:47) [2]
    если проводить аналогию с дельфи, то MyComponent.Designer - это кодовый эквивалент dfm, а .resx - .rc или .res
  • kaif © (24.10.07 18:05) [3]
    2 clickmaker ©   (24.10.07 17:47) [2]
    Спасибо.
    Да, я кажется понял.

    Действительно, Forms1.Designer.cs содержит инициализацию дочерних контролов, с их координатами и прочими подробностями. Просто так как я в основном сижу под ASP.NET я совсем забыл про этот момент в разработке форм под Windows. А в моем компоненте, как я понял, эту двойственность файлов можно ликвидировать, так как он не содержит дочерних контролов. Это - сам по себе отдельный контрол.

    Сейчас бьюсь над странной вещью.
    Насколько легко и непринужденно созданный мной в Windows Application Project компонент попал в палитру на ToolBox!

    Ничего подобного мне пока не удается добиться от Web Control-а, который я создал в ASP.NET Web Site. То есть компонент уже существует, руками на форму его тэг вписывается, в дизайнере он отображается, префикс для пространства имен я на форме объявил с помощью директивы Register, однако на палитре в ToolBox не могу его найти нигде. Там так много компонентов...Может я его просто не вижу? Хотя вряд ли... Мрак.

    Как-то чудом месяц назад мне удалось этого добиться, когда я создавал Web Control Library, а затем как-то криво в том же каталоге Web Site. Да и то это работало непонятно как,  а сейчас ничего не выходит с отдельным компонентом. Может быть кто-нибудь знает секрет?
  • boa_kaa © (24.10.07 20:16) [4]

    > clickmaker ©   (24.10.07 17:47) [2]
    > если проводить аналогию с дельфи, то MyComponent.Designer
    > - это кодовый эквивалент dfm, а .resx - .rc или .res

    до разделения на 2 части логически одного модуля уже дошли. Глядишь к 4ой версии вернутся заголовочные файлы. А то пока найдешь нужную функцию... Гмы-гмы...
  • kaif © (25.10.07 01:52) [5]
    Похоже, что нужно оттранслировать Web Control до стадии dll, чтобы он появился в ToolBox. Любопытно, что для обычного контрола в Windows Application этого не требуется.

    Собственно, что я хочу?

    У меня неважная память и я теряюсь, видя слишком много возможностей выбора, когда вызываю Add Item...

    Поэтому я хочу для себя выработать простую схему, точнее две простые схемы (одну для проектирования Windows-приложений и вторую - для ASP.NET-приложений), устроенные примерно так:

    1. Создаю приложение (Windows Application или ASP.NET). В нем я собираюсь тестировать и применять свои компоненты.
    2. Создаю компоненты. Не в виде отдельной сборки, так как я не собираюсь становиться разработчиком компонентов, мне всего лишь они нужны для лучшей структуризации моих приложений.
    3. Хочу видеть их в ToolBox, чтобы их проще было использовать при дизайне форм или web-страниц.

    С Windows-приложением мне удалось легко выйти на этот путь. 1-2-3. А вот с ASP.NET пока не очень. Конечно, я могу приноровиться и не пользоваться ToolBox вообще. Но мне будет обидно, если я просто что-то упустил, а это было возможно. Какую-то директиву или атрибут, позволяющий компоненту просто оказаться в списке ToolBox.

    Неужели инспектор объектов, визуальный дизайнер и редактор текста утроены проще, нежели этот простой список имен, называемый ToolBox? Почему они мой компонент видят сразу, а этот идиот в упор его не воспринимает и требует dll для того чтобы компонент мог туда встать хотя бы в рамках текущего ASP.NET проекта?

    Может быть под борландовской средой мне было бы проще? Я пока лишь пробовал Microsoft Visual Studio и задаю здесь свои вопросы тем, кто, возможно, умеет работать в обеих средах.
  • clickmaker © (25.10.07 11:03) [6]

    > Похоже, что нужно оттранслировать Web Control до стадии
    > dll, чтобы он появился в ToolBox

    разумеется.
    Как и в обычном приложении. Разница только в том, что веб - это dll + ascx, а обычное - только exe или dll
  • boa_kaa © (25.10.07 14:18) [7]

    > kaif ©   (25.10.07 01:52) [5]

    Специально не занимался этим вопросом, но есть предположение. Может, дело в том, что в W32-приложении все инкапсулируется внутри сборки (exe/dll). Как следствие, в тулбокс помещается все, что создается как UserControl. В противовес вебу, для которого контрол должен быть логически завершенной частью.

    Хотя, может и чушь это...
 
Конференция ".Net" » Зачем нужен partial class? [C#]
Есть новые Нет новых   [118586   +38][b:0][p:0]