[image]

C#: Как осуществить "import" определений и т.п.?

 
+
-
edit
 

anybody

координатор

админ. бан
Я веду очередное наступление на технологию .NET и C#, DotGNU Portable dotNET в частности. :)

Как и в прошлую свою попытку, я столкнулся с "проблемой модульности". Например, в Java, Python, Ruby и т.п. легко и непринуждённо можно написать определения в одном файле (MyClass.java), а рабочую часть--- в другом (NewClass.java). После чего поменять MyClass.java, перекомпилировать только MyClass-- и радоваться жизни. :)

С C# в рамках Portable dotNET у меня такого не получается. Да, я могу "вынести" определения в другой файл .cs, потом передать компилятору оба файла на компиляцию. Но полученный файл будет монолитным, что разрушает всю, столь мною любимую, систему "модульности", когда можно делить задачу на части и работать с ними отдельно.

Прошу помочь! :)
   3.0.13.0.1

Tico

модератор
★★★
anybody> Как и в прошлую свою попытку, я столкнулся с "проблемой модульности". anybody> Прошу помочь! :)

В Сишарпе нет такой системы модульности, как в Яве или C++ или С. Всё делается через assemblies и reflection. В принципе, подобие модульности можно обеспечить с помощью интерфейсов, определяя их в третьем assembly и имплементируя где-то во втором(который библиотека), но повальное использование интерфейсов ведёт к другим проблемам.
   6.06.0

Tico

модератор
★★★
А, можно ещё использовать паттерн Service Provider, но это опять таки суррогат. Встроенной в процесс разработки модульности в сишарпе нету, увы :(
   6.06.0

anybody

координатор

админ. бан
Tico> А, можно ещё использовать паттерн Service Provider, но это опять таки суррогат. Встроенной в процесс разработки модульности в сишарпе нету, увы :(

Ясно. Большая благодарность за быстрый и исчерпывающий ответ! :)

А известно ли, почему в C# не встроили столь интересную возможность? Существуют ли какие-то соображения на этот счёт?
   3.03.0

Tico

модератор
★★★
anybody> А известно ли, почему в C# не встроили столь интересную возможность? Существуют ли какие-то соображения на этот счёт?

Assemblies это другая идеология, в которой модули самодостаточны и при кодировании, и при установке, плюс ещё дают разные сервисы вроде версионного контроля, безопасности и локализации без лишнего геммороя. В принципе, для эффективного разделения труда и модульности разные .h и их аналоги не нужны - есть другие способы, которые я указал (кстати вспомнил ещё стабы, вот) . Интерфейсы чище, хотя злоупотреблять ими не стоит. Не следует преуменьшать способности бангалорских программистов прятать под вашими интерфейсами всякую гадость.
   6.06.0
Это сообщение редактировалось 22.09.2008 в 23:17
RU Dem_anywhere #24.09.2008 03:14
+
-
edit
 

Dem_anywhere

аксакал
★☆
А это не то?

code text
  1. namespace PM
  2. {
  3.     partial class A
  4.     {
  5.         partial void OnSomethingHappened(string s);
  6.     }
  7. }
  8.  
  9.     // This part can be in a separate file.
  10.  
  11. namespace PM
  12. {
  13.     partial class A
  14.     {
  15.         // Comment out this method and the program
  16.         // will still compile.
  17.         partial void OnSomethingHappened(String s)
  18.         {
  19.             Console.WriteLine("Something happened: {0}", s);
  20.         }
  21.     }
  22. }
   3.0.13.0.1
+
-
edit
 

Luchnik

аксакал
★★
Это кажется только с 3-го фрэймворка...
   
RU Dem_anywhere #24.09.2008 08:23
+
-
edit
 

Dem_anywhere

аксакал
★☆
Вообще, компилер что во втором, что в третьем один и тот же, в третьем просто библиотеки добавили/обновили.
   3.0.13.0.1

Tico

модератор
★★★
Нет, частичные классы это не то. Они для того, чтобы девелоперы не лезли ручками в автогенерируемый код дизайнера, и чтобы отделить собственно гуй от связанной с ним логики (не путать с бизнес-леером). В WPF это было доведено ещё дальше.
   6.06.0
+
-
edit
 

tarasv

аксакал

anybody> Как и в прошлую свою попытку, я столкнулся с "проблемой модульности". Например, в Java, Python, Ruby и т.п. легко и непринуждённо можно написать определения в одном файле (MyClass.java), а рабочую часть--- в другом (NewClass.java). После чего поменять MyClass.java, перекомпилировать только MyClass-- и радоваться жизни. :)

Вопрос немного в сторону. А как вы отделяете implementation от declaration в Java?
   7.07.0

anybody

координатор

админ. бан
Tico> Assemblies это другая идеология, в которой модули самодостаточны и при кодировании, и при установке, плюс ещё дают разные сервисы вроде версионного контроля, безопасности и локализации без лишнего геммороя.

Покопался я немного и нашёл очень интересные вещи про эту .NET assembly:

"Assemblies and the Global Assembly Cache (C# Programming Guide)" (http://msdn.microsoft.com/en-us/library/ms173099(VS.80).aspx)

Ещё в wikipedia.org многое написано на эту тему.

Из приведённых ссылок можно многое узнать об оной идеологии assembly. Интересная вещь! Благодарю!

*******************************************************************
Tico>В принципе, для эффективного разделения труда и модульности разные .h и их аналоги не нужны - есть другие способы, которые я указал (кстати вспомнил ещё стабы, вот).

А это что за зверь такой: "стаб"?
   3.0.33.0.3
+
-
edit
 

anybody

координатор

админ. бан
tarasv> Вопрос немного в сторону. А как вы отделяете implementation от declaration в Java?

Прошу прощения за молчание, но я подбирал правильный ответ. Итак, с Java я уже очень давно не работал. Прошу меня извинить, но я не могу ответить на ваш вопрос.
   3.0.33.0.3
+
-
edit
 

tarasv

аксакал

tarasv>> Вопрос немного в сторону. А как вы отделяете implementation от declaration в Java?
anybody> Прошу прощения за молчание, но я подбирал правильный ответ. Итак, с Java я уже очень давно не работал. Прошу меня извинить, но я не могу ответить на ваш вопрос.

Не проблема, просто я подумал что чтото пропустил ;) и в java появился способ разделения implementation от declaration отличающийся от использования интерфейсов.
   7.07.0

Tico

модератор
★★★
anybody> А это что за зверь такой: "стаб"?

Функция, дающая видимость полезной деятельности.
   6.06.0

anybody

координатор

админ. бан
anybody>> А это что за зверь такой: "стаб"?

Tico> Функция, дающая видимость полезной деятельности.

А где о них (стабах) почитать можно?
   3.0.33.0.3
+
-
edit
 

anybody

координатор

админ. бан
По итогам моих экспериментов с .NET я создал ветку "Пример использования .NET Assembly при помощи C#" (http://balancer.ru/tech/forum/viewtopic.php?id=64070).
   3.0.33.0.3
+
-
edit
 

Mishka

модератор
★★★
anybody>>> А это что за зверь такой: "стаб"?
Tico>> Функция, дающая видимость полезной деятельности.
anybody> А где о них (стабах) почитать можно?

Стаб от stub — затычка. При разработке часто временная затычка. При дизайне часто кусок кода в том месте, где надо по требованиям языка, но без конкретизации. Например, ты говоришь, что у тебя объект яблоко. У него есть метод какой-то, который ты не знаешь как будет выглядеть, но попробовать уже надо:
code text
  1. class apple
  2. {
  3. public:
  4.   aplle( ) { }
  5.   virtual ~apple( ) { }
  6.  
  7.   int CalcRipeness( void ) { return 3; }
  8. protected:
  9.   float weight;
  10.   float date;
  11. };


Класс вполне компилируемый. Поэтому это так называемая девелоперская затычка. Дизайнерская можно ввести pure virtual класс с несколькими имплементированными методами. Эти методы могут делать что-то очень простое, а могут просто быть там, чтобы можно было компилировать, а реальная работа полностью спрятана.
   3.0.33.0.3

Tico

модератор
★★★
Да. Лучше всё-таки, чтобы затычки делали что-то реальное или близко к реальному, а не просто компилировались. Например, если стаб сделан как скелет будущего сложного алгоритма, можно чтобы на стадии стаба он уже возвращал, пусть даже статически фиксированно и в единственном варианте, нечто более-менее похожее на предполагаемый результат этого алгоритма.
Это позволяет сразу же включать компоненты в систему юнит-тестов, которые потом не придётся радикально менять. Если такое возможно, конечно. Иногда так просто не получается.
   6.06.0

Tico

модератор
★★★
О, почти забыл. Есть ещё NMock.
   6.06.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru