Оффтопик. Изучаем C#

Автор Тема: Оффтопик. Изучаем C#  (Прочитано 179764 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Оффтопик. Изучаем C#
« : 28-08-2015, 18:30:21 »
Объединил оффтопик из двух тем. Вопросы по изучению C#, которые не касаются AutoCAD .NET API прошу задавать здесь.
/* Александр Ривилис */


На простое решение рассчитывать не приходится! Да уж!
« Последнее редактирование: 28-03-2016, 18:25:41 от Александр Ривилис »

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #1 : 28-08-2015, 20:17:48 »
Думаю, что это было бы для тебя проще.

Взял на вооружение! Иду качать!

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #2 : 28-08-2015, 20:21:46 »
http://eknigi.org/programmirovanie/91446-c-40-polnoe-rukovodstvo.html

Это будет оптимальным решением.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #3 : 28-08-2015, 20:26:17 »
На простое решение рассчитывать не приходится! Да уж!
В выложенном мною .net-решении сложного ничего нет. Исходный код подробно комментирован. Если есть конкретные вопросы по существу темы - можешь не стесняться спрашивать.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #4 : 28-08-2015, 20:28:07 »
Если есть конкретные вопросы по существу - задавай.
Подожди. Вопросы будут скорее всего после (хотябы) поверхностного изучения C#. ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #5 : 28-08-2015, 20:29:58 »
Вопросы будут скорее всего после (хотябы) поверхностного изучения C#.
Я не отслеживаю темы от Windcastle. Если там всё плохо с азами языка программирования, то конечно - сначала нужно мат. часть языка учить.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #6 : 28-08-2015, 20:31:36 »
Windcastle == Пашин Евгений
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #7 : 28-08-2015, 20:32:16 »
В выложенном мною .net-решении сложного ничего нет. Исходный код подробно комментирован. Если есть конкретные вопросы по существу темы - можешь не стесняться спрашивать.

А у Вас терпение железное? ))))))))) Вот у Александра Ривилиса с этим вроде как порядок )))))))))

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #8 : 28-08-2015, 20:33:02 »
Windcastle == Пашин Евгений
Ясно... :) Он же Гоша, он же Сева... Чем один логин не устроил? Вопрос риторический.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #9 : 28-08-2015, 20:36:06 »
А у Вас терпение железное?
Нет. Глупые вопросы меня взрывают. Не ленись читать и я буду целее. :)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #10 : 28-08-2015, 20:37:08 »
Это будет оптимальным решением.
Осталось дело за малым: прочитать этот кирпич... :)

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #11 : 28-08-2015, 20:38:54 »
Нет. Глупые вопросы меня взрывают. Не ленись читать и я буду целее.

Да понятно... читать люблю! С пониманием плохо!

Ладно, не буду стонать. Буду стараться.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #12 : 28-08-2015, 20:42:53 »
Для меня он пока как "Война и мир" на китайском языке )))) Шучу!

Осилю и даже еще добавки попрошу  :)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #13 : 28-08-2015, 20:43:09 »
читать люблю! С пониманием плохо!
Ну так для этого форумы и существуют. Если задавая вопрос ты обозначаешь материал, предварительно прочитанный и результаты поиска в Инете по непонятному вопросу, то реакция на вопросы будет иная, т.к. ты тем самым показываешь, что и сам прикладываешь усилия к тому, чтобы найти ответ на него.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #14 : 28-08-2015, 20:44:03 »
Но с C# я тут буду не в тему!

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #15 : 28-08-2015, 20:46:26 »
Можно будет в личные сообщения вопросы задавать?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #16 : 28-08-2015, 20:46:34 »
Но с C# я тут буду не в тему!
Вот хороший дополнительный ресурс, где можно задавать вопросы по кодингу и около того.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #17 : 28-08-2015, 20:47:48 »
Можно будет в личные сообщения вопросы задавать?
Нет, в личке этого лучше не делать, т.к. в случае открытого общения полезный ответ могут дать и другие форумчане. Можешь в личку присылать ссылки на свои вопросы, опубликованные на обозначенном мною выше ресурсе. Правда там отвечают быстро, возможно, что ответят и до того, как ссылку получу я. :)

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #18 : 28-08-2015, 20:53:02 »
Так я ж по C# вроде как думал вопросы задавать. Просто не хотелось бы остаться с "китайской грамотой" один-на-один, а то глядишь и свихнусь, или мотивация в ноль уйдет.

Просто я считаю, что если я прочел книгу и не смог толково ее пересказать или объяснить, то значит я ее зря читал... Не хочу этого, но и мучать других не хочется. Просто хочется понимать настолько ясно, чтобы потом маленькому ребенку (пере/рас)сказать смог.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #19 : 28-08-2015, 20:57:24 »
не хотелось бы остаться с "китайской грамотой" один-на-один
C# очень простой язык. Шильдт (да и не только он) излагает материал последовательно и понятно. Для освоения с нуля вполне подходит (как справочник). Я учился по Троелсену и использовал Шильдта как дополнительное чтиво + справочник.

Если C# для тебя и после чтения книг является "китайской грамотой", то вполне возможно, что программирование - это не твоё.
« Последнее редактирование: 28-08-2015, 21:24:11 от Александр Ривилис »

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #20 : 28-08-2015, 21:20:03 »
Если C# для тебя и после чтения книг является "китайской грамотой", то вполне возможно, что программирование - это не твоё.

Я знаю чего Вам, Андрей, не хватает. Вам не хватает чуткости по отношению к начинающим. Меня лично Ваши слова "программирование - это не твоё" - задели, вернее мне вдруг уже захотелось закрыть книгу и не читать ее. Наверное, лучше знать тот язык, который понятен, а не тот, который популярен, хотя VB.NET тоже популярен.

Я может тоже не очень корректен был назвав книгу "китайской грамотой", за что извиняюсь.

Вы правы, Андрей, эту тему пора закрыть.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #21 : 28-08-2015, 21:23:13 »
Меня лично Ваши слова "программирование - это не твоё" - задели, вернее мне вдруг уже захотелось закрыть книгу и не читать ее
Ну вот. А я только-только сказал Андрей Бушман, что он в этот раз удивительно деликатен. Обрати внимание, что это было не утверждение, и даже не предположение, а теоретическое рассуждение о такой возможности.

P.S.: Эту тему я как раз для такого оффтопика оставил.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #22 : 28-08-2015, 21:38:35 »
Я правда хочу, но становится как-то не по себе, когда кто-то утверждает / предполагает, что если не осилишь, значит не программист! Как если бы я только учился ходить и вдруг кто-то со стороны сказал: "Падает, да уж, наверное, ходить не сможет, а может и не дано!".

Я уверен, что если человек специалист в своем деле, то он сможет объяснить легко и просто даже ребенку то, что знает он, если конечно он действительно понимает и знает свое дело.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #23 : 28-08-2015, 22:06:45 »
Что такое рефлексия? Уже седьмой раз читаю это слово в книге, но не понимаю о чем идет речь?

В мире .NET рефлексией (reflection) называется процесс обнаружения типов во время выполнения. С применением служб рефлексии те же самые метаданные, которые отображает утилита ildasm.exe, можно получать программно в виде удобной объектной модели. Например, рефлексия позволяет извлечь список всех типов, которые содержатся внутри определенной сборки *.dll или *.ехе (или даже внутри файла *.netmodule если речь идет о многофайловой сборке), в том числе методов, полей, свойств и событий, определенных в каждом из них. Можно также динамически обнаруживать набор интерфейсов, которые поддерживаются данным типом, параметров, которые принимает данный метод, и других деталей подобного рода (таких как имена базовых классов, информация о пространствах имен, данные манифеста и т.д.).

Сразу неимоверное количество вопросов возникает:
1. Что подразумевают под метаданными?
2. рефлексией (reflection) называется процесс обнаружения типов во время выполнения... Чего? Типов данных?
3. Что подразумевают под удобной объектной модели... типа иерархическая структура (древовидная)?
4. если речь идет о многофайловой сборке... Это типа, когда я пишу EXE приложение, но в проекте еще дополнительно создаю проект библиотеку классов? Или что это?
5. полей ... Это контрол на форме или что?
6. имена базовых классов ... Это как в классе Человек.Голова.Рот.Сказать ("Здрасте"): именами базового класса Человек будут Голова и Рот?
7. Чем пространство имен отличаются от просто имен базового класса?
8. Манифест - это типа файл настроек? Или нет?

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #24 : 28-08-2015, 22:20:19 »
Обрати внимание, что это было не утверждение, и даже не предположение, а теоретическое рассуждение о такой возможности.
Если C# для тебя и после чтения книг является "китайской грамотой", то вполне возможно, что программирование - это не твоё.

Речь идет не об абстрактном человеке, у которого может не получиться, а конкретно адресовано мне. Как бы эти слова программируют меня (вброс в подсознание), что я уже какой-то не-до-программист. Я не обижаюсь, я просто сделал вывод. Коим и поделился. Эти слова не похожи на Ваши, когда Вы мотивировали изучать C#, просто хотя бы потому что это язык для профессионалов... как будто это уже признак профессионализма. Вот это мотив, не правда ли?

Если из фразы  убрать "...вполне возможно, что...", то суть останется той же и соответственно и уже не идет речь о рассуждении, здесь уже, можно сказать, определился фактор, по которому можно судить: "Не понимаешь - значит не твое", причем не просто не твое (всмысле C#), а вообще любое программирование! Я увидел это так.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #25 : 28-08-2015, 23:05:46 »
1. Что подразумевают под метаданными?
https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%B0%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B2_.NET
2. рефлексией (reflection) называется процесс обнаружения типов во время выполнения... Чего? Типов данных?
Типов данных, имён методов, свойств, событий, типов числа и порядка аргументов и т.д. и т.п.
3. Что подразумевают под удобной объектной модели... типа иерархическая структура (древовидная)?
Один раз возьми и воспользуйся утилитой ILSPY ( http://ilspy.net/ ) и посмотри при помощи неё какую-нибудь .NET-сборку. Например, acmgd.dll из каталога AutoCAD. Увидишь много интересного и полезного.
4. если речь идет о многофайловой сборке... Это типа, когда я пишу EXE приложение, но в проекте еще дополнительно создаю проект библиотеку классов? Или что это?
Можешь создавать сам, а можешь подключать уже готовые .NET-сборки (dll-файлы).
5. полей ... Это контрол на форме или что?
Нет. В C# есть понятие полей.
6. имена базовых классов ... Это как в классе Человек.Голова.Рот.Сказать ("Здрасте"): именами базового класса Человек будут Голова и Рот?
Нет. Про базовые классы и наследование двумя словами не скажешь.
7. Чем пространство имен отличаются от просто имен базового класса?
Это просто совершенно разные вещи. Пространство имён используется только для разделения понятий. Например, пространство имён AutoCAD и пространство имён Revit. И там и там допустим есть класс Point3d, но они совершенно по-разному устроены. Чтобы не было пересечений по именам будешь указывать AutoCAD.Point3d и Revit.Point3d в одном и том же модуле. Это я очень упрощенно...
8. Манифест - это типа файл настроек? Или нет?
Почитай: https://msdn.microsoft.com/ru-ru/library/1w45z383%28v=vs.110%29.aspx

P.S.: Мне кажется, что ты слишком на долго застрял на введении.
« Последнее редактирование: 28-08-2015, 23:43:28 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #26 : 28-08-2015, 23:14:49 »
Я уверен, что если человек специалист в своем деле, то он сможет объяснить легко и просто даже ребенку то, что знает он, если конечно он действительно понимает и знает свое дело.
А вот тут ты совершенно не прав. Далеко не каждый очень классный программист может научить другого человека программированию. И далеко не каждый классный учитель программирования в состоянии создать программный шедевр. Талант учителя и талант программиста - это совершенно разные и зачастую непересекающиеся вещи. И это касается не только программирования. Есть множество случаев, когда спортсмен не достигший вершин в спорте становился тренером будущих олимпийских чемпионов. А эти олимпийские чемпионы, став в дальнейшем тренерами, не смогли вырастить себе достойную смену.
Как бы эти слова программируют меня (вброс в подсознание), что я уже какой-то не-до-программист.
Ну как бы защищайся. Как минимум докажи (на деле), что он не прав! :) Одних для достижения максимального результата нужно всегда хвалить, других постоянно ругать, третьи любят сочетания кнута с пряником...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #27 : 29-08-2015, 00:59:12 »
Я не обижаюсь, я просто сделал вывод. Коим и поделился. Эти слова не похожи на Ваши, когда Вы мотивировали изучать C#, просто хотя бы потому что это язык для профессионалов... как будто это уже признак профессионализма. Вот это мотив, не правда ли?
Раз уж создали тему для где можно флудить...
Да не переживай - Андрей грамотный специалист, постоянно и непрерывно поднимающий свою квалификацию (идя в ногу с технологиями) и охотно делящийся с ней со всем интернетом (реально тратящий на это много человеко-часов чистого альтруизма). Но стиль общения у него иногда пугает неподготовленного читателя - мне впрочем иногда тоже хочется обматерить очередного начинающего специалиста-программиста который печатать научился, а читать нет, причем еще бывает и особый вид - которые считают, что если он соизволил свой вопрос написать - который на первой-же строке гугла ответ высвечивает, то ему просто все обязаны.
Чтоб тебя успокоить - хотя успокоит-ли это - могу сказать, что я хоть и программист, но больше чем C# меня бесит только язык программирования 1С (VB.xxx я впрочем вообще не использую) - нет он мне более чем понятен, но писать я на нем не могу "физиологически" - тошнит. Если в книге много неясного, то возможно она либо не на твой уровень (все когда-то начинали), либо просто не твоим языком написанна - уверен - было-бы желание, C# может "осилить" абсолютно каждый - просто на это время требуется. Пробуй, пиши, не бойся ошибаться - меньше "копипасты", больше осмысленного кода - пробуй - а почему в книге так, а не попробывать вот-так - вникай в суть - на интересный вопрос тебе с удовольствием ответят (бывает глянешь на названия вопросов - и даже открывать их не хочется - только старый добрый Александр - дай бог Вам здоровья, искренне завидую широте Вашей души - и вытягивает).
А Андрей, наверное, еще не раз Вас "потролит" - ему можно - он "заслужил" такое право.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #28 : 29-08-2015, 08:34:09 »
"физиологически" - тошнит.

Так близко к истине ))) Точно такое же ощущение, когда не понятно )))

Я поймал себя на мысли, что моя проблема заключается в том, что после чтения книги я не могу связать в логическое предложение то, что прочел. Не потому что косноязычен, а потому что после прочтения родилось больше вопросов, чем ответов. Как если бы я прочел массу книг по английскому языку, но так до сих пор и не знал его. А в принципе так и есть. Я на нем могу говорить, писать, переводить со словарем, могу разговаривать в отдельных случаях, но если меня кто-то спросит: "а как вообще английский язык устроен, что он из себя представляет", то я разведу руками и отправлю спрашивающего по тому пути, по которому прошел сам: "вон, видишь там гора книг по теме, иди и читай...". Но это же неправильно. Спрашивающий скорее грустно вздохнет, вынуждено пойдет к этой горе и круговорот непонимания захлестнет следующего. Я это вижу так.

На форумах я нашел ответы, вопросы на которые мучали меня годами. Скорость решения задач резко возросла лишь потому, что появилась ясность. Я уже смело набирал код, понимая как он работает, не опасаясь, что он где-то выскочит с ошибкой. Я понимаю, что мне было нужно - понимание, а не просто копи-паст кода.

Да, в любом случае буду читать, стараться, но если я не пойму сути, то я не хотел бы быть осмеянным кем-то... А Андрей, наверное, еще не раз Вас "потролит" - ему можно - он "заслужил" такое право. - это не соответствует этике по большому счету. Если человек заслужил "корону", то он де-факто получил право на "издевательства" над некоронованными? О нет, я не за этим пришел. Когда я "вырасту", то я вынуждено выступлю антагонистом Андрею.

Оффлайн WindcastleАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 58
  • Карма: 0
Re: Изучаем C#
« Ответ #29 : 29-08-2015, 08:41:16 »
Александр, доброе утро!

Итак, как я понял прочитанное:
1. Метаданные - это как карта городов (допустим России) с описанием каждого города, его краткой историей, описания его улиц с номерами домов, транспортных остановок, магазинов и т.д. Что-то типа структурированной (визуализированной) информации об объекте (страны под названием Российская Федерация). В нужном направлении думаю?

2. Рефлексия - это процесс, когда один объект отслеживает другой объект, определяет его метаданные. Что-то типа, когда молодой человек рассматривает девушку и определяет ее параметры, свойства и ее методы (ее возможности). Приблизительно так?

3. Посмотрел ILSPY и вижу упорядоченную, структурированную древовидную информацию по каждой библиотеке. Какие в каждую из них входят классы, какие у этих классов методы и свойства... Вроде так вижу.

4. То есть я пишу приложение *.exe, к нему могу подключать *.dll файлы (извне) или добавить в проект еще один проект библиотеки *.dll, которая будет зависеть от данного приложения *.exe. Но при этом созданная библиотека внутри может быть подключена другими приложениями. Так?

5. Поля - это не понятно!

Код - vb.net [Выбрать]
  1. Public Имя As String
  2. Public Property Фамилия As String

Вроде как внутри класса можно создать просто переменную, и можно также создать свойство, только понять не могу для чего это нужно, если и поле и свойство будут отображаться при использовании класса. Для чего используется поле? Свойство мне понятно! Это как цвет глаз у человека, например. Но если я создам поле с таким же названием цвет глаз, что принципиально стало другим? Не пойму!

6. Под вопросом так и остается.

7. То есть это как если были бы хоккейное и футбольное поле, но вратари в обоих случаях были бы разными. На футбольном поле это легко одетый человек, а на хоккейном поле тепло и защищенный от ударов шайбы. И потому у каждого из этих вратарей будут соответственно разные: свойства, методы, события и т.д. Верно понимаю? Значит использовать вратаря из хоккейного поля ни в коем случае использовать в футбольном поле нельзя, только если его имя и фамилию, к примеру. Так?

8. Манифест - это как общий перечень деталей автомобиля с описанием того, какая деталь от какой зависит. Правильно понимаю?


Подытожу, грубо говоря рефлексия - не что иное как процесс определения параметров объекта в процессе выполнения какой либо процедуры, а параметры заранее не известны.

Жду критики!


Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #30 : 29-08-2015, 11:50:23 »
Поля - это не понятно!
Windcastle - Вы молодец. Молодец в том, что задались этим вопросом (для меня это показатель, что Вы пытаетесь вникнуть в суть, а не прочитать). Да действительно, с точки зрения абстракции алгоритма разницы между ними нет - и это очень хорошо, что Вы мыслите именно абстрактными категориями - а не классами, полями, байтами и пр.
Проще всего понять что такое поля - это через их физический смысл - это раньше было необходимо для производительности, а сейчас для совместимости (в некоторых диалектах языков как представить член класса - как поле или как свойство решает оптимизатор транслятора). Когда вы создаете класс - компилятор запоминает его методы в одном месте памяти, а при создании каждого экземпляра объекта выделяется только тот необходимый минимум памяти, чтобы сохранить его данные (на которые и указывает ссылка, на объект - теперь Вам наверное более понятно - для чего нужна типизация - чтоб понять что можно делать с этими данными - как их "читать"). Так вот поля - это упрощенно говоря прямые ссылки на часть этих данных - а свойства - это методы (то есть вызываемые функции), которые созданы по определенным правилам - свойство может и не содержать никаких данных, а например, возвращать вычисления черт знает чего от чего, то-же самое при установке свойства - это не прямая запись в память - а запуск функции с определенными параметрами - которые могут например перед запоминанием переданного аргумента "зазиповать" его, а перед возвратом - раззиповать обратно.

з.ы. по остальному - смотрел правда бегло - вроде все верно.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #31 : 29-08-2015, 12:22:27 »
Жду критики!
У меня возникло такое ощущение, что ты, еще не дочитав введение в детектив а уже спрашиваешь у того, кто прочитал, кто убийца. При этом вполне возможно, что убийцы нет, а есть вор... :)
Я понимаю твоё нетерпение, но я бы вернулся к этим вопросам после первого прочтения книги целиком.
На большую часть вопросов ты найдёшь ответы в книге сам. Зато появятся другие вопросы.
Отмечу лишь один вопрос:
4. То есть я пишу приложение *.exe, к нему могу подключать *.dll файлы (извне) или добавить в проект еще один проект библиотеки *.dll, которая будет зависеть от данного приложения *.exe. Но при этом созданная библиотека внутри может быть подключена другими приложениями. Так?
Не *.dll будет зависеть от *.exe, а наоборот. И этот *.dll, если он правильно спроектирован, может использоваться и с другими *.dll и/или *.exe
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #32 : 29-08-2015, 16:35:58 »
Цитата: Windcastle
Когда я "вырасту", то я вынуждено выступлю антагонистом Андрею.
"Хороший" полицейский? Ну всё, придётся мне на двг.ру уходить... :)
Жду критики!
Так обижаться же будешь опять, снова выискивая в замечаниях какой-то своеобразный смысл, который мною в них не вкладывался... Я, пожалуй, не буду комментировать твою "оптимистичную" реакцию, размазанную на целую страницу...

По поводу свойств хорошо разжёвывает материал Рихтер (CLR via C#). Почитай - очень доходчиво объясняет как и что работает. Применительно к свойствам и полям: никаких свойств в CIL на самом деле не существует. На самом деле это ни что иное как "синтаксический сахар" в языке C#. То, чем в коде ты оперируешь как "свойство", при компиляции в CIL будет преобразовано в пару методов, что-то вроде get_YourPropertyName() и set_YourPropertyName(). Если в свойстве только блок get будет объявлен как public, то public будет лишь первый из обозначенный методов (т.е. можно будет только получать значение свойства, но не править).

Назначение свойств (т.е. их get_*\set_* методов) в том, чтобы дать тебе полный контроль над доступом к скрытым полям. В коде свойств ты выполняешь нужные тебе предварительные проверки и принимаешь решение о том, предоставлять ли доступ к запрошенному полю или же, к примеру, генерировать исключение, или генерировать событие, сообщающее об изменении свойства (в коде set_* метода). Там же выполняешь проверку значения, прежде чем вернуть его (в get_* методе). Если же ты предоставляешь доступ к полю напрямую, через public, то не можешь контролировать этот доступ.

Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.

Думаю, что целесообразней тебе было бы изучать c# по Троелсену, а не по справочнику Шильдта.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #33 : 29-08-2015, 17:33:24 »
Для чего используется поле?
поле должно хранить значение свойства (не важно, какова область видимости этого свойства). За поле, объявленное с модификатором доступа public нужно бить линейкой по рукам.
Цитировать
Манифест - это как общий перечень деталей автомобиля с описанием того, какая деталь от какой зависит. Правильно понимаю?
Всё тот же Рихтер, всё в той же книге и этот вопрос разжёвывает.
Цитировать
Что-то типа, когда молодой человек рассматривает девушку и определяет ее параметры, свойства и ее методы (ее возможности). Приблизительно так?
...
То есть это как если были бы хоккейное и футбольное поле, но вратари в обоих случаях были бы разными. На футбольном поле это легко одетый человек, а на хоккейном поле тепло и защищенный от ударов шайбы. И потому у каждого из этих вратарей будут соответственно разные: свойства, методы, события и т.д. Верно понимаю? Значит использовать вратаря из хоккейного поля ни в коем случае использовать в футбольном поле нельзя, только если его имя и фамилию, к примеру. Так?
Какие-то мутные у тебя аналогии...
Цитировать
Подытожу, грубо говоря рефлексия - не что иное как процесс определения параметров объекта в процессе выполнения какой либо процедуры, а параметры заранее не известны.
А что, этот текст был чем-то не понятным?

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #34 : 29-08-2015, 18:01:59 »
никаких свойств в CIL на самом деле не существует. На самом деле это ни что иное как "синтаксический сахар" в языке C#.
Опс - граф - тут сразу несколько ошибочных утверждений, во первых не в языке C#, а во всем .Net. Во вторых это не "сахар" а конкретный механизм. Да создавая свойство XXX автоматически создадутся методы get_XXX и если и на запись,  то и set_XXX, через которые и будет обращение, но не наоборот - создав метод get_Abc() - свойство Abc не появится - и в "рефлекшине" соотв. записи не будет. Такая картина впрочем не только в .Net (в смысле автоматическое создание методов для доступа - чтоб не городить отдельный механизм).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #35 : 29-08-2015, 18:06:28 »
тут сразу несколько ошибочных утверждений, во первых не в языке C#, а во всем .Net. Во вторых это не "сахар" а конкретный механизм.
Я писал:
Цитировать
никаких свойств в CIL на самом деле не существует.
Во первых, CIL - это не C#. Если нет в CIL, то нет и в языках более высокого уровня, т.к. их код компилируется именно в CIL.
Во вторых, термин "синтаксический сахар" не является моим, и часто используется в книжках, в частности в той теме, где как раз таки свойства и объясняются.

Цитировать
но не наоборот - создав метод get_Abc() - свойство Abc не появится - и в "рефлекшине" соотв. записи не будет.
Я и не писал этого. когда я писал о get и set, то имел соответствующие блоки кода в определении свойства.
Цитировать
Такая картина впрочем не только в .Net (в смысле автоматическое создание методов для доступа - чтоб не городить отдельный механизм).
Я в курсе. Это и называется "синтаксическим сахаром". Тот же Рихтер его так и называет.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #36 : 29-08-2015, 18:19:31 »
А я пишу, что в CIL они существуют и это не сахар см. в рефлексе, либо попробуй создать свойство созданием метода.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #37 : 29-08-2015, 19:27:47 »
А я пишу, что в CIL они существуют и это не сахар см. в рефлексе, либо попробуй создать свойство созданием метода.

Цитата: Рихтер "CLR via C# 4 Edition" стр. 267
Поддержка свойств встроена в C#. Обнаружив код, пытающийся получить или задать свойство, компилятор генерирует вызов соответствующего метода. Если используемый язык не поддерживает свойства напрямую, к ним все равно можно обратиться посредством вызова нужного метода доступа. Эффект тот же, только исходный текст выглядит менее элегантно.

Помимо методов доступа, для каждого из свойств, определенных в исходном тексте, компиляторы генерируют в метаданных управляемого модуля запись с определением свойства. Такая запись содержит несколько флагов и тип свойства, а также ссылки на методы доступа get и set. Эта информация существует лишь затем, чтобы связать абстрактное понятие «свойства» с его методами доступа. Компиляторы и другие инструменты могут использовать эти метаданные через класс System.Reflection.PropertyInfo. И все же CLR не использует эти метаданные, требуя при выполнении только методы доступа.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #38 : 29-08-2015, 20:17:02 »
Ну так и с какого перепуга стандартная процедура CLI является синтаксическим сахаром языка С#. Я кстати в данной цитате нигде не увидел, что это он (сахар).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #39 : 29-08-2015, 21:24:03 »
Ну так и с какого перепуга стандартная процедура CLI является синтаксическим сахаром языка С#. Я кстати в данной цитате нигде не увидел, что это он (сахар).
Цитата: "Jeffrey Richter" link=http://www.wintellect.com/devcenter/jeffreyr/clr-via-c-will-not-be-updated-for-net-3-5
In addition, .NET 3.0 shipped with C# 2.0 and so no changes were made to the C# language/compiler either. Of course, .NET 3.5 does ship with C# 3.0 which does offer many new features (automatically-implemented properties, implicitly typed local variables, extension methods, lambda expressions, object initializers, anonymous types, implicitly typed arrays, partial methods, query expressions, and expression tress). However, all of these features are just compiler syntactic sugar to make syntax easier for programmers.
Поправляюсь - синтаксическим сахаром он называл автоматические свойства.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #40 : 29-08-2015, 22:04:38 »
Это уже другой разговор - для Топикстартера (а может и не только его) поясню - автоматические свойства - это метод создания свойства при котором в неявном для программиста виде создаются закрытое поле в котором содержится значение, которое и возвращает/задает данное свойство - это безусловно синтаксический сахар.
з.ы. Цитата выше, кстати, хорошо объясняет почему меня раздражает c# - практически все перечисленное в ней - в чистом виде "функциональщина" - которую натягивают на не предназначенный для этого язык из другой парадигмы (ну он вроде как потомок с и с++) - ИХМО получается как седло на корове.
з.з.ы - То А. Ривилис - флудить Вы сами разрешили.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #41 : 29-08-2015, 22:33:21 »
почему меня раздражает c# - практически все перечисленное в ней - в чистом виде "функциональщина" - которую натягивают на не предназначенный для этого язык из другой парадигмы
я ничего подобного не вижу.
(ну он вроде как потомок с и с++) - ИХМО получается как седло на корове.
Смотря что имеется в виду под "потомком". Да, синтаксис весьма похож, но это не то же самое, что С или C++. Код С89 можно компилировать в Visual C++, поэтому С++ - полноценный потомок С (у Стровструпа, кстати, есть хорошая книга по истории С++). Однако ни код C, ни код С++ откомпилировать в C# не удастся, поэтому родства подобного C\C++ у C# с этими языками всё же нет.

Программировать в С++ можно как в объектно-ориентированном, так и в функциональном стиле (решение за программистом) - эту возможность Стровструп оставил умышленно, т.к. считает, что не существует единственно верного способа программировать и все люди уникальны (каждый может найти своё хорошее решение задачи). В то же время C# - объектно-ориентированный язык. Функциональное программирование в нём невозможно. В то же время и С не является чисто-функциональным (тем более C++). Серебрянной пули не существует - нет языка, который идеально подходит под все сферы программирования. Это признаёт и Стровструп (создатель С++).

C#, на мой взгляд, достаточно прост в изучении (гораздо проще, чем С++). Когда я принял решение уходить с VBA, то выбирал между VB.NET и C#. Изначально хотел взять VB.NET, но посмотрев его синтаксис понял, что мне он понятней не более, чем синтаксис C#, т.к. общего у него с VBA не больше, чем у кошки и собаки. Выбрал C#, т.к. по нему больше материала и его вместо VB.NET в интернете рекомендовали авторитетные забугорные специалисты. Как показала практика - с выбором я не ошибся. Кроме того, в то время VB.NET уступал по функционалу языку C#. Это сейчас майкрософтом принято решение постоянно подтягивать VB.NET к возможностям C#, как жгут резиновый. Но это означает, что VB.NET всегда будет как минимум на шаг позади C# (имхо). Я не знаю, как у VB.NET дела обстоят сейчас, да и не интересно мне это.

Мне нравятся все три языка(C\C++\C#). Идеальных языков нет, у каждого есть свои преимущества и недостатки. Отторжение у меня вызывает разве что язык гоблинов (VB) и его аналоги: VBA, VB.NET, VBScript. Не знаю, вот коробит меня от него и всё, хотя когда-то сам же активно писал код на VBA в MS Access 2003 и выше (сейчас уже и забыл его).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #42 : 29-08-2015, 22:51:00 »
з.з.ы - То А. Ривилис - флудить Вы сами разрешили.
А я от своих слов и не отказываюсь. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #43 : 29-08-2015, 23:17:12 »
То Андрей - цитату мою Вы не с начала вырвали - "перечисленное в ней" - это не про c# а про цитату из Вашего поста.
В то же время C# - объектно-ориентированный язык. Функциональное программирование в нём невозможно.
    Это с какого перепугу - а LINQ и анонимные функции - это что - да в чистейшем виде функциональщина - неудобно и криво сделано - да - о чем я и пишу (что понятно ибо это как скрестить ужа с ежом) - но она там гораздо более возможней, чем в тех же c и c++ - где даже сборка мусора отсутствует (ну в с++ там по моему какая-то затычка в этом роде была).
    ИХМО - большая часть всех "нововведений" C# (оно-же как и версии .Net) последних лет - имеют функциональную природу (кстати объектно-ориентированный язык  - это совсем не значит, что он императивный - он в равной степени может быть и функциональным - просто объекты у него по "умолчанию" не изменяются, а пересоздаются), готов обосновать на перечне нововведений любой из "последних" версий, а вся структура "родителей" (с,с++) - ну скажем так, не очень заточена под функциональное программирование - поэтому смотреть на ту реализацию нового - забытого старого без слез нельзя - хотя надо признать - делают, это самое скрещевание, на удивление качественно - иногда я бы даже сказал шедеврально - особенно с учетом "груза поддержки" всей предыдущей парадигмы языка.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #44 : 30-08-2015, 09:49:01 »
Я очень даже в курсе, что многое из добавленного в C# взято из функциональных языков. Однако, на мой взгляд, реализовано это в нём достаточно удобно и не вызывает у меня отторжения. Перенимать положительный опыт других языков - в этом нет ничего зазорного. Главное, чтобы реализовано это было так, чтобы программисту было удобно этим пользоваться. То, как в C# реализованы методы расширения и LINQ, работающий на основе этого механизма, меня вполне устраивает. Работать с анонимными функциями мне так же удобно и мне не важно, откуда эти возможности были переняты.
Цитировать
кстати объектно-ориентированный язык  - это совсем не значит, что он императивный - он в равной степени может быть и функциональным - просто объекты у него по "умолчанию" не изменяются, а пересоздаются
Я знаю. Тогда это получается чисто-фунциональный язык.
Цитировать
вся структура "родителей" (с,с++) - ну скажем так, не очень заточена под функциональное программирование
Да, в них отсутствуют ленивые вычисления и они не являются чисто-функциональными. Но у них есть свои плюсы и основной из них - скорость работы. У меня нет желания вести религиозные войны.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Изучаем C#
« Ответ #45 : 30-08-2015, 11:08:03 »
То, как в C# реализованы методы расширения и LINQ, работающий на основе этого механизма, меня вполне устраивает.
Если-б не было c# - то наверное и vb многих  устроил - это смотря с чем сравнивать.
Но у них есть свои плюсы и основной из них - скорость работы.
Этот аргумент лет 20 как потерял актуальность - к c# он точно не имеет никакого отношения (я думаю во всех Ваших кодах последних 5 лет не найдется, к примеру, ни одной итерации по индексу - а ведь так быстрей - а везде будет минимум foreach или вообще linq вызов, более того если Вы такое увидите - то первый предложите "бить линейкой по рукам" и это и с моей точки зрения правильно и подобных примеров в Ваших-же кодах - немерено).
Все выложенные коды на с#, потихоньку все более и более имеют функциональный стиль (Microsoft старается) - авторы в большинстве случаев этого сами не понимают, более того часто воспринимают это в штыки (видимо от слабого владения предметом - многие считают что функциональщина - это что-то медленное и неуклюжее).
Синтаксическая база С разработана и прекрасно работает - как своего рода продвинутый ассемблер Фон Нейманевской архитектуры - это факт подтвержденный сотнями практически совместимых между собой компиляторов различных архитектур и платформ (естественно не на уровне вызовов API - а на уровне как раз их создания). Но эта архитектура совсем не обладает гибкостью - linq - сделан не плохо - но по факту эта независимая отдельная надстройка у которой нет взаимодействия с самим языком (основным синтаксисом - пришлось по сути свой дополнительный вводить) - не так-ли? Получается смесь нарванных кусков из разных парадигм которые не свести к одному - нету целостности. Дело не в том, что там чего-то еще нет, хотя я думаю что когда в c# появятся активные шаблоны и провайдеры типов - Вы первый кто не будет представлять как Вы до этого без них писали. Дело в том, что пора понять что хлам надо выкидывать - он вроде и не мешает - но пыль с него протирать нужно, да и место занимает. Т.к., повторюсь, уже почти все пишут функциональщину и не замечают - но из-за поддержки всей остальной парадигмы не могут воспользоваться в "полную силу" - например тип "String" с самого начала .Net - функциональный - никто не задумывался, что это так - нет ни одной перегрузки метода по замене строки - везде порождает новую - и ничего никто по этому поводу не плачет, а ведь произвести оптимизацию на уровне компилятора на предмет можно-ли не "рожать" новую, а заменить старую - можно только в функциональном языке (или в глухо отведенной функциональной части - типа linq) - что произойдет с ней дальше в императивном языке компилятору не понятно (чтоб понять там надо такую логику включать - по сравнении которой все шахматные программы - детский лепет). Про параллельные вычисления я вообще промолчу.
Я все это к тому - хотим мы или нет с# в итоге все равно сильно "переродиться" и будет уже совсем не похож на нынешней (уже не похож). Тогда может и я начну на нем писать не плюясь.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #46 : 31-08-2015, 09:48:11 »
А что, этот текст был чем-то не понятным?

К сожалению, не совсем, поскольку в следующем пункте шла речь о типах: классах, интерфейсах, делегатах, структурах, перечислениях.

Пространство имен System.Reflection содержит типы, предназначенные для извлечения сведений о сборках, модулях, членах, параметрах и других объектах в управляемом коде путем обработки их метаданных.

Когда попытался понять, что такое типы в System.Reflection оказался в ступоре, поскольку как я понял, это тоже классы, но каждый из них выполняет свои функции.

Даже такая простая (для Вас) фраза: В структурах CustomAttributeNamedArgument представляет именованный аргумент настраиваемого атрибута в контексте, предназначенном только для отражения. меня слегка "пригвоздила". Да, я не понял этой фразы, увы, но я не сдаюсь. Мне пока проще мыслить другими категориями: девушками, футбольными полями, машинами и т.д. Для начала найду, что означает отражение.

Я рад за Вас, Андрей, что Вам это все понятно и легко дается. Вам нужно лишь понять одно, что разные люди обладают разным понимаем одного и того же явления и события. Я скорее и проще изучу язык программирования, используя образные (на птичках, людях, машинах и т.д.) выражения, чем конкретное определение, взятое из интернета. Читать я умею, поверьте, а вот понимание хромает.

Спасибо за Рихтера! Скачал, попробую хотя бы по несколько страниц прочитывать-ИЗУЧАТЬ в день! ИЗУЧАТЬ, а не просто читать. Прогресс будет 100%.

По поводу полей попробую пересказать, что Вы имели ввиду:

Как я понял, в старом и добром VB6, создание классов и свойств класса тоже происходило с помощью полей и свойств:

Вот пример:

Код - Visual Basic [Выбрать]
  1. Private mvarРадиус As Single ' Это поле
  2.  
  3. Public Property Let Радиус(ByVal vData As Single) ' Это получение свойства
  4.    mvarРадиус = vData
  5. End Property
  6.  
  7. Public Property Get Радиус() As Single ' Это установка значения свойства
  8.    Радиус = mvarРадиус
  9. End Property

Когда я присмотрелся, я понял, что при использовании класса я не видел в списке свойств переменной mvarРадиус, но этот параметр успешно играл свою роль в работе класса (точнее свойства Радиус) и он тоже хранит в себе значение, все время, пока класс существует!

За поле, объявленное с модификатором доступа public нужно бить линейкой по рукам.

Грубо... получение ошибок - это тоже процесс обучения.

Зато становится понятным для чего нужно поле держать приватным Private mvarРадиус As Single.
Однако, я решил попробовать сделать подобное в Visual Basic 2013 и вот что у меня получилось:
Код - vb.net [Выбрать]
  1. Public Class Class1
  2.     Private _color As Boolean
  3.     Public Property Color As Boolean
  4.         Get
  5.             Color = Me._color
  6.         End Get
  7.         Set(value As Boolean)
  8.             _color = value
  9.             ' Здесь вставляется событие или процедура (а можно просто вызвать процедуру)
  10.         End Set
  11.     End Property
  12.  
  13.     Public Sub AnyThing()
  14.         Dim FLD As New Class1
  15.         FLD.Color = True ' Что же это получается, что я и поле могу использовать и свойство?
  16.         FLD._color = True ' Что же это получается, что я и поле могу использовать и свойство? Почему поле отображается, если оно PRIVATE
  17.     End Sub
  18.  
  19. End Class
  20.  

И поле и свойство - видимые! Что меня лично смущает.

Я что-то не понимаю, где моя ошибка?

Вроде сделал скрытым поле, а оно видимое... Напрашиваются вопросы:
1. Андрей линейкой будет махать?
 или
2. Андрей включит своего мудрого учителя и поможет понять в чем проблема?

Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.
Будьте человеком (вернее спуститесь с небес к людям) и объясните эту фразу как-нибудь проще... Можно на птичках, цветочках или т.п.?

Думаю, что целесообразней тебе было бы изучать c# по Троелсену, а не по справочнику Шильдта.
Учту!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #47 : 31-08-2015, 10:07:41 »
Скачал, попробую хотя бы по несколько страниц прочитывать-ИЗУЧАТЬ в день!
А я бы посоветовал сначала один раз прочитать всю книгу, не сильно вдаваясь в детали. Причина очень простая - во введении и первых главах даются общие понятия без детализации. А их объяснение даётся в следующих главах. Количество вопросов сразу уменьшится.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #48 : 31-08-2015, 10:09:23 »
FLD._color = True ' Что же это получается, что я и поле могу использовать и свойство? Почему поле отображается, если оно PRIVATE
Внутри класса оно доступно, но недоступно вне его.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #49 : 31-08-2015, 10:29:50 »
Внутри класса оно доступно, но недоступно вне его.

Ok! Понял. Проверил и убедился )))




Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #50 : 31-08-2015, 10:58:26 »
Напрашиваются вопросы:
1. Андрей линейкой будет махать?
 или
2. Андрей включит своего мудрого учителя и поможет понять в чем проблема?
Ты уж определись: либо ты обиженный, предельно вежливый интеллигент, либо ты поясничаешь (тогда нехрен обижаться) не понятно чего добиваясь.

Если что, то я могу игнорировать твои вопросы, даже читать их не буду - мне это не сложно. Возможно в этом случае твоя жизнь на форуме станет более весёлой. Тебе в любом случае ответит А.Н. Ривилис (ему придётся, не зависимо от того хочет он этого или нет ибо это его работа), так что от отсутствия моих сообщений ты ничего не потеряешь.

Если в моём коде обнаруживается какая-то ошибка или некая глупость - я не обижаюсь, когда мне пишут, что я написал хрень. Если я смотрю в книгу и вижу фигу, то я не обижаюсь, если меня ткнут носом в то, что я пропустил. Мне не важно, в какой форме мне указывают на мои ошибки: в "вежливой", или "военной" - главное, чтобы замечание было по существу. Я не устраиваю размазывание соплей на пару десятков постов и тебе впредь не советую этого делать - сильно раздражает окружающих (и не только меня, поверь).

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #51 : 31-08-2015, 11:00:15 »
Внутри класса оно доступно, но недоступно вне его.
Я очень сомневаюсь, что в букваре об этом не пишут...

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #52 : 31-08-2015, 11:18:55 »
Цитировать
Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.
Будьте человеком (вернее спуститесь с небес к людям) и объясните эту фразу как-нибудь проще... Можно на птичках, цветочках или т.п.?
В редакторе сообщений есть специальная кнопка с тегом цитаты. Используй её вместо того, чтобы делать шрифт "жирным", дабы всем было понятно, что это именно цитата.

 Поясню на примере интерфейсов... В C# ты уже наверняка читал об интерфейсах. Так вот классы, реализующие эти интерфейсы инкапсулируют в себе логику работы (изложенную посредством программного кода), т.е. содержат конкретный код одного из возможных вариантов реализации этого интерфейса. Другой класс, реализующий этот же интерфейс, может инкапсулировать в себе совершенно иную логику работы.

Если ты в коде выполняешь взаимодействие на уровне интерфейсов (вместо использования конкретных классов напрямую), то ты можешь прозрачно для программы подменять один класс, реализующий этот интерфейс, другим классом. В результате такой подмены поведение твоей системы может кардинально меняться. Ты так же можешь добавлять новые классы, реализующие этот интерфейс, тем самым расширяя набор возможных вариантов поведения твоей системы.

Разжёванный материал находится в книге, п.17 указанной мною здесь.

Цитировать
Будьте человеком (вернее спуститесь с небес к людям)
В контексте твоего вопроса это паясничанье идёт тебе не не пользу...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #53 : 31-08-2015, 11:51:20 »
Тебе в любом случае ответит А.Н. Ривилис (ему придётся, не зависимо от того хочет он этого или нет ибо это его работа), так что от отсутствия моих сообщений ты ничего не потеряешь.
Уточняю. Я отвечу в любом случае, если вопрос будет связан с AutoCAD API. Но отвечать на вопросы по основам языков программирования я не обязан. И в большинстве случаев буду указывать, что нужно пользоваться поиском.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #54 : 31-08-2015, 12:09:08 »
После прочитанного уже и не хочется никакого C#.

В C# ты уже наверняка читал об интерфейсах.

Читал, но не понял! Интерфейсами Вы называете то, что просто является кодом? Тогда Вы меня еще больше запутали.

В контексте твоего вопроса это паясничанье идёт тебе не не пользу...
У меня правда сложилось впечатление, как будто Вы какой-то царь, а я какой-то холоп. Вот я и подумал, что надо Вам об этом как-то сказать и как можно мягче. У меня похоже не получилось.

Если ты в коде выполняешь взаимодействие на уровне интерфейсов (вместо использования конкретных классов напрямую), то ты можешь прозрачно для программы подменять один класс, реализующий этот интерфейс, другим классом.

Ну и что это значит?


Странно, цитаты сработали на Александра Ривилиса...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #55 : 31-08-2015, 12:14:19 »
1. Обрати внимание, что всё что ты процитировал написал не я, а Андрей Бушман. Т.е. кнопку "цитировать выделенное" ты нажимал не там где нужно.
2. Ты снова начинаешь задавать вопросы, не прочитав книгу. Дальше я буду отвечать на вопросы по C# только тогда, когда пойму, что ты уже её прочитал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #56 : 31-08-2015, 12:17:15 »
Цитировать
Читал, но не понял! Интерфейсами Вы называете то, что просто является кодом?
...
Ну и что это значит?
Я вижу, что книг ты не читаешь, зато продолжаешь нести какую-то чушь (царь\холоп) и размазывать сопли. Всё, я умываю руки, далее без меня.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #57 : 31-08-2015, 12:17:38 »
Т.е. кнопку "цитировать выделенное" ты нажимал не там где нужно.

Приношу свои извинения.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Изучаем C#
« Ответ #58 : 01-09-2015, 00:43:08 »
Я вспоминаю как я относительно недавно (года 2 тому назад) начинал изучать C#. Он и правда не очень прост в изучении, если раньше вообще с ООП не имел дела. Книги написаны теми, кто уже его знает, для кого все понятия уже очевидны. Поэтому, по книгам мне лично было очень тяжело изучать. Я читал и перечитывал отдельные главы по нескольку раз и абсолютно ничего не мог понять. Интерфейсы, поля, свойства, индексаторы, абстрактные классы, виртуальные методы, статические и нестатические классы - голова от этого только болела :). Даже с примерами понятнее не становилось. При этом, я уже довольно сносно на тот момент писал на LISP. И поначалу я на C#  писал LISP-подобные программы с одним командным классом и с одним длиннющим методом в нем :) А понимание пришло с опытом. Постепенно, с каждым новым кодом узнавал и понимал что-то новое. Потом, уже с небольшим багажом опыта снова начинал читать книги, понимал уже гораздо больше. Кое-что просто запоминал "как есть", не понимая, а понимание приходило позже, когда разбирал чей-то чужой код с нужным мне методом или классом...
В общем, пройдя уже через это, я понимаю, что гораздо легче и продуктивнее было бы, если бы я пошел на какие-то курсы по программированию. Они как раз ориентированны на начинающих. Если есть такая возможность - не пренебрегайте ею. Ну или по тому же пути, что шел я - методом проб и ошибок. Но так дольше и будет много пробелов в базовых знаниях, которые долго придется самому закрывать. А терроризировать кого-то из опытных, просить разъяснить - это пустая трата времени. В большинстве случаев, разъяснение будет на том же профессиональном языке, на котором книга написана. Мало кто готов тратить свое время (бесплатно) на подробное и обстоятельное разжевывание базовых понятий.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #59 : 01-09-2015, 06:50:06 »
Я читал и перечитывал отдельные главы по нескольку раз и абсолютно ничего не мог понять.

Как я Вас понимаю. Пока так и есть.

Мало кто готов тратить свое время (бесплатно) на подробное и обстоятельное разжевывание базовых понятий.

От этого меня и коробит, что своими вопросами я кого-то отвлекаю от важных дел (как если бы меня отвлекали, когда дел невпроворот). Я все это прекрасно понимаю. Поэтому постараюсь вообще не задавать вопросов, если не готов к ответам. Теперь буду разбираться в примерах - это пока единственный путь для меня, чем я и занимаюсь уже.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 609
  • Карма: 155
    • ПГСу Бложик
Re: Изучаем C#
« Ответ #60 : 01-09-2015, 09:12:00 »
Нда, я в программирование без года неделю, однако представляю КАК должно коробить Александра Ривилиса и уж тем более Андрея от того что опубликовано в сообщении 29.

Евгений, обрабатывайте возможные ошибки и удаляйте только свое и еще, это НЕ vb.net, это vba.

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #61 : 01-09-2015, 09:21:25 »
это НЕ vb.net, это vba.

Я пишу в Visual Studio используя NET библиотеки и COM объект (вернее то, что наследует COM объект)... Вы меня в ступор ввели. На чистом VBA этого я бы не смог сделать никогда.
Да, я использую COM методы, но назвать это чистым VBA как-то язык не поворачивается.

На мой взгляд, COM - это пожалуй единственная зацепка, для того чтобы плавно перейти от чистого VBA/ActiveX к чистому NET (VB или C#).

Может Александр поправит, если я что-то не так написал?!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #62 : 01-09-2015, 10:12:43 »
и еще, это НЕ vb.net, это vba.
VBA - это язык программирования. А то, что здесь - это COM/ActiveX.
На мой взгляд, COM - это пожалуй единственная зацепка, для того чтобы плавно перейти от чистого VBA/ActiveX к чистому NET (VB или C#).

Может Александр поправит, если я что-то не так написал?!
Резать к чёртовой матери, не дожидаясь перитонитов!
Т.е. забыть про то, как это было в VBA и сразу использовать то, что есть в AutoCAD .NET API. Иначе к  AutoCAD .NET API ты не перейдёшь никогда.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #63 : 01-09-2015, 10:24:34 »
Резать к чёртовой матери, не дожидаясь перитонитов!

Эх, классика )))

Иначе к  AutoCAD .NET API ты не перейдёшь никогда.

Перейду, вот увидите. И еще Вам помогать отвечать на вопросы спрашивающих буду.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #64 : 01-09-2015, 10:26:13 »
Перейду, вот увидите. И еще Вам помогать отвечать на вопросы спрашивающих буду.
Договорились! Этот боевой настрой мне нравится. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #65 : 01-09-2015, 10:30:18 »
            ' Получение редактора текущего документа (напрашивается вопрос: что под редактором текущего документа подразумевается)
В действительности он один для всех документов. В ObjectARX это класс AcEditor, имеющий единственный экземпляр для всех документов. А вот в AutoCAD .NET API почему-то сделали получение объекта Editor через документ. Реально же это один и тот же объект для всех документов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #66 : 01-09-2015, 10:35:43 »
Спасибо, за прояснение вопроса )

Реально же это один и тот же объект для всех документов.

Для всех чертежей во всех открытых приложениях AutoCAD? Или только для текущего приложения?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #67 : 01-09-2015, 10:38:27 »
Для всех чертежей во всех открытых приложениях AutoCAD? Или только для текущего приложения?
Только для текущего приложения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #68 : 01-09-2015, 10:39:46 »
Спасибо!  :)

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #69 : 01-09-2015, 11:18:01 »
Александр Ривилис, подскажите, а Вы могли бы создать раздел по терминологии AutoCAD NET, в котором можно было бы иметь полный перечень терминов и понятий, который принадлежит данной теме, чтобы люди друг друга могли понимать одинаково, а то я прогуливаюсь по различным форумам, источникам и что я вижу: везде разная терминология и понятия, что существенно снижает скорость восприятия материала и процесс решения задачи. У кого-то SelectionSet - называется выборкой, у кого-то создание массива объектов и так далее (это еще не самый плохой термин, что я видел)... и ведь люди так и пишут в комментариях к коду, а я потом гадаю, что они имели ввиду. А может я не один такой. Идея вроде как не слишком плохая.

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 609
  • Карма: 155
    • ПГСу Бложик
Re: Изучаем C#
« Ответ #70 : 01-09-2015, 11:32:25 »
VBA - это язык программирования. А то, что здесь - это COM/ActiveX.
Видимо я не достаточно правильно выразился. Я не про ЯП писал и не про методы работы с автокадом. Я имел ввиду то, как написан код, какие конструкции языка были использованы.
Для примера, использование переменной типа long при итерации по наборам выборки и его не явного приведения к инту, про удаление всех выборок какие только есть, без разбора, про неявные преобразования из типа в тип. К сожалению это характерно для программирования в VBA-стиле. Потому это VBA (в плохом смысле этого слова), а не COM/ActiveX написанный на VB.NET

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #71 : 01-09-2015, 11:51:16 »
Идея вроде как не слишком плохая
Идея неплохая, но объём работы для меня неподъёмный. Лучше я буду тратить время на помощь программистам, чем заниматься терминологией. Да и проще и реальнее купить книгу. Например, Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015
У Николая Николаевича устоявшаяся за много лет терминология. Вот её я и рекомендую придерживаться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #72 : 01-09-2015, 11:58:14 »
У Николая Николаевича устоявшаяся за много лет терминология. Вот её я и рекомендую придерживаться.

Согласен :)

Оффлайн Пашин Евгений

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 12
  • Skype: pashin.evgeniy
Re: Изучаем C#
« Ответ #73 : 01-09-2015, 12:12:30 »
К сожалению это характерно для программирования в VBA-стиле. Потому это VBA (в плохом смысле этого слова), а не COM/ActiveX написанный на VB.NET

Вы не сильно удивитесь, если я скажу, что я начинал с VB6. Отсюда и старые подходы ))) VBA для меня - это прикладной язык программирования для решения конкретных задач под различные приложения. К примеру я до сих пор пишу на VBA под Microsoft Office (Word, Excel, Visio, Acces, Outlook), а также Corel Draw, ну и конечно же AutoCAD. Иногда приходится работать с SolidEdge и SolidWorks. Увы, мне слезть с него не получится полностью. Поэтому Вы не сильно ошиблись, язык VB.NET, а подход к программированию VB6 (даже не VBA). Я это понимаю.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Оффтопик. Изучаем C#
« Ответ #74 : 02-09-2015, 20:51:47 »
Александр Ривилис - разместил пост здесь т.к. можно офтопить - если это перебор то перенесите куда-нибудь или сотрите.
Это для вдохновения нашему топикстартеру - бывают и такие случаи.
Реальный пост с dwg.ru http://forum.dwg.ru/showpost.php?p=1444353&postcount=13
Цитировать
Разговор со службой поддержки хостинга:
09:42:05 Дмитрий Пшеченко: Здравствуйте! Чем я могу вам помочь?
09:46:35 я: здравствуйте. У меня на сайте размещен некоторый скрипт php, и когда моя программа, запущеная на моем локальном компе обращается к этому скрипту - он начинает выполняться. Я попробовал написать аналогичный скрипт на языке autolisp. поместил его на сайт. Прога к нему обращается, но в ответ лишь получает текстовое содержимое этого скрипта, так, как если бы у этого файла со скриптом было бы разрешение file.txt. то есть код не выполняется
09:47:53 Дмитрий Пшеченко: В какой паке находится скрипт?
09:49:09 я: указал папку

файл со скриптом называется siteee.lsp
09:53:47 Дмитрий Пшеченко: Скорее всего, этот скрипт не запустится.
09:53:55 Дмитрий Пшеченко: Минуту, дополнительно проверю.
09:54:54 Дмитрий Пшеченко: Не будет работать точно на хостинге.
09:55:57 я: а почему?
09:56:55 Дмитрий Пшеченко: Этот язык не предназначен для веб-разработок.
10:00:04 я: простите, а можно список языков, скрипты на которых будут работать?
10:00:52 Дмитрий Пшеченко: Такого списка у меня нет. Тут можете посмотреть базовую информацию: https://ru.wikipedia.org/wiki/%D0%92...BD%D0%B8%D0%B5
Вот такие они web-autolisp программисты.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #75 : 02-09-2015, 20:59:51 »
Вот такие они web-autolisp программисты.
:D :D :D
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Оффтопик. Изучаем C#
« Ответ #76 : 13-09-2015, 23:18:10 »
Всех - и кто еще только учится и тех кто учит, кто больше задает вопросы и кто больше отвечает, кто написал все правильно и тех кто потом исправлял - с Праздником.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #77 : 13-09-2015, 23:19:18 »
С каким праздником?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Оффтопик. Изучаем C#
« Ответ #78 : 13-09-2015, 23:22:32 »
Семен Семеныч - 256 день в году однако.

Оффлайн art_rrc

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Оффтопик. Изучаем C#
« Ответ #79 : 25-10-2015, 00:28:44 »
Раз уж здесь разрешен флуд, и в предпросмотре не показываются вложения. Решил тут проверить как прикрепляются GIFки. Нужно для дальнейшего более четкого формирования вопросов... ::)

О! Результат отличный. И вообще, форум что надо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #80 : 25-10-2015, 00:34:26 »
Раз уж здесь разрешен флуд
Только если перейдёшь с VB.NET на C# !!!  :D
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн art_rrc

  • ADN Club
  • **
  • Сообщений: 70
  • Карма: 1
  • Skype: art_sapranovich
Re: Оффтопик. Изучаем C#
« Ответ #81 : 25-10-2015, 00:39:16 »
Только если перейдёшь с VB.NET на C# !!! 
Перейду, обязательно перейду. Но не все же сразу...) Пока и так слишком много вопросов, которые не связаны с выбором языка. С ними немного разгребусь и тогда  ай-да изучать новый синтаксис.

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #82 : 30-10-2015, 17:56:36 »
А что-то не могу осилить C#. Чего-то не хватает: времени или мозгов :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #83 : 30-10-2015, 20:14:04 »
Скорее, желания и внятной задачи небольшого объема :)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #84 : 03-11-2015, 09:13:39 »
А что-то не могу осилить C#. Чего-то не хватает: времени или мозгов :)
Алексей Кулик прав - нужна именно четко поставленная задача. Когда будешь знать что хочешь увидеть в итоге, тогда начнешь потихоньку делать, искать нужную информацию и вникать в суть происходящего. Обычно находишь уже готовый пример и начинаешь в нем разбираться. Благо сейчас доступ к интернету есть почти везде

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #85 : 03-11-2015, 21:19:11 »
кто может дать ссылку на русскоязычный источник, дабы почитать про транзакцию и работу с базами. У меня в этом деле проблема :)
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #86 : 03-11-2015, 22:25:38 »
кто может дать ссылку на русскоязычный источник, дабы почитать про транзакцию и работу с базами. У меня в этом деле проблема :)
Тынц

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #87 : 14-02-2016, 20:13:53 »
Не стану поднимать отдельную тему т.к. вопрос по C#, а не Автокаду. Как заблокировать назойливое предупреждение компилятора "Несоответствие между архитектурой процессора проекта "MSIL", построение которого выполняется, и архитектурой процессора ссылки "accoremgd", "AMD64". По сути все понятно: компилирую для AnyCPU, а у автокада библиотеки для amd64. Можно смело игнорировать. НО! Оно выводится для каждой ссылки каждого проекта и в этом мусоре реальные проблемы теряются. И нигде не найду, как отключить предупреждение не зная его номера и еще на уровне всего проекта, а не файла.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #88 : 14-02-2016, 20:19:44 »
avc
Откуда берёшь acmgd.dll, accoremgd.dll и acdbmgd.dll? Если брать их из ObjectARX\inc, то таких сообщений нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #89 : 14-02-2016, 20:44:45 »
Дополнительный вопрос - под какую версию AutoCAD выполняется компиляция? При условии компиляции под 2009, например, подобные сообщения не редкость.
P.S. Возможно, надо поменять уровень предупреждений. Но я в этом не уверен.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #90 : 14-02-2016, 20:49:43 »
Дополнительный вопрос - под какую версию AutoCAD выполняется компиляция? При условии компиляции под 2009, например, подобные сообщения не редкость.
Так как в вопросе фигурирует accoremgd.dll, то версия не ниже 2013 (в ней произошло разделение acmgd.dll на accoremgd.dll и acmgd.dll). Общие (независящие от разрядности AutoCAD) acmgd.dll и acdbmgd.dll появились в ObjectARX SDK 2011.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #91 : 15-02-2016, 00:04:42 »
Ссылался конечно на библиотеки из папки автокада, где отладка идет. Как-то даже в голову не пришло, что ObjectARX(который весь на C++) может пригодится для компиляции C#. Поменял ссылки, предупреждение исчезло. Чудеса. Получается там (в inc) не же самая dll, что в автокаде.
Спасибо.
p.s. Жаль, что так и не научился отключать предупреждения компилятора :)
p.p.s А предупреждение-то было во всех версиях с незапамятных времен, когда из автокада изъяли бейсик и пришлось переучиваться на дот-нет. Да, я долго терпел. Я вообще терпеливый :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #92 : 15-02-2016, 00:12:11 »
Получается там (в inc) не же самая dll, что в автокаде.
Нет конечно. Там так называемая "заглушка", т.е. большинство методов не реализованы в отличие от методов в dll в составе AutoCAD. Это и позволяет использовать одну и туже dll для x86 и для x64, хотя в составе AutoCAD они разные, т.к. "привязаны" к самому AutoCAD (acad.exe, acdbXX.dll и т.д.)
p.s. Жаль, что так и не научился отключать предупреждения компилятора :)
Почитай тут: http://thebuildingcoder.typepad.com/blog/2013/06/processor-architecture-mismatch-warning.html
Если в двух словах, то такую конструкцию нужно добавить в файл проекта (.csproj или .vbproj):
Код - XML [Выбрать]
  1. <PropertyGroup>
  2.   <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  3.     None
  4.   </ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>
  5. </PropertyGroup>
Я не пробовал, но теоретически должно помочь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #93 : 15-02-2016, 12:32:06 »
Я не пробовал, но теоретически должно помочь.
Попробовал. Помогает! На мой взгляд это оптимальное решение. Универсальное и не требуется поиск и загрузка огромных ненужных библиотек.
Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #94 : 15-02-2016, 14:31:18 »
не требуется поиск и загрузка огромных ненужных библиотек.
Огромные и ненужные библиотеки, это ObjectARX SDK? Ну-ну... Там большую часть занимает документация, которая совсем не бесполезная.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #95 : 15-02-2016, 17:17:55 »
А предупреждение-то было во всех версиях с незапамятных времен, когда из автокада изъяли бейсик и пришлось переучиваться на дот-нет. Да, я долго терпел
Ну не знаю, что в этом такого критичного. Мешают - скрыл, да и все:

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #96 : 06-12-2017, 19:01:51 »
Здравствуйте!
Студия подчёркивает волнистой синей линией конструктор. При наведении мышкой подписывает "Method must have a return type". В чём может быть причина?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #97 : 06-12-2017, 19:05:05 »
Здравствуйте!
Студия подчёркивает волнистой синей линией конструктор. При наведении мышкой подписывает "Method must have a return type". В чём может быть причина?
Так вы код покажите. Сигнатуру метода
А написано, что метод должен иметь возвращаемый тип

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #98 : 06-12-2017, 19:07:50 »
конструктор должен иметь возвращаемый тип?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #99 : 06-12-2017, 19:10:23 »
конструктор должен иметь возвращаемый тип?
Метод должен иметь возвращаемы тип. Void - единственный вариант, который не возвращает ничего
Конструктор НЕ должен иметь возвращаемый тип! Метод не может иметь конструктора в принципе )) Это для классов

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #100 : 06-12-2017, 19:14:21 »

Я конструктор класса и пытаюсь написать

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #101 : 06-12-2017, 19:22:20 »
Странно. А покажите класс, от которого наследуетесь - BaseArmElement

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #102 : 06-12-2017, 19:27:57 »



Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #103 : 06-12-2017, 19:30:33 »
1. Название класса и конструктора не совпадает. Попробуйте копипастом взять название класса. Может русский символ где-то затесался.
2. Глюк студии. Попробуйте её заново открыть

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #104 : 06-12-2017, 19:34:04 »
1. Название класса и конструктора не совпадает. Попробуйте копипастом взять название класса. Может русский символ где-то затесался.
Название скопировано.

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #105 : 06-12-2017, 19:34:28 »
2. Глюк студии. Попробуйте её заново открыть
Помогло, Спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #106 : 06-12-2017, 19:37:54 »
Помогло, Спасибо!
Такое бывает достаточно часто. То, что подчеркивается какие-то методы/переменные в редакторе VS - это еще не показатель ошибки. Вот если вы скомпилировали и появилась ошибка в компиляции - это уже точно ошибка и её следует найти и устранить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #107 : 12-12-2017, 14:37:29 »
Здравствуйте, подскажите, пожалуйста, в С# есть аналог оператора with в VB?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #108 : 12-12-2017, 14:39:59 »
Здравствуйте, подскажите, пожалуйста, в С# есть аналог оператора with в VB?
Нет

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #109 : 12-12-2017, 14:42:42 »
в С# есть аналог оператора with в VB?
Насколько я знаю, прямого аналога нет. Разве что, есть похожий механизм - упрощённый инициализатор объекта или коллекции. Доступен в C# версии 7: https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/classes-and-structs/object-and-collection-initializers. Но это только при создании объекта или коллекции.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #110 : 12-12-2017, 14:44:18 »
Мурена, а вообще - смотря для чего вам. Если инициализировать поля для экземпляра класса, то есть специальный инициализатор объектов. Типа того:
Код - C# [Выбрать]
  1. public class Bunny
  2. {
  3.     public string Name;
  4. }
  5.  
  6. var bunny = new Bunny { Name = "Bugs" };

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #111 : 12-12-2017, 14:46:01 »
Доступен в C# версии 7
Джозеф Албахари говорит, что доступен с версии C# 3.0

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #112 : 12-12-2017, 14:50:22 »
Да, уже исправился :)
Просто в студии 2017 появились настойчивые подсказки везде использовать именно такую инициализацию, вот я и подумал, что это новшество 7-й версии.
Настолько настойчивые, что мне даже приходится в настройках отключать такие предупреждения:


Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #113 : 12-12-2017, 15:05:16 »
смотря для чего вам
Для инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #114 : 12-12-2017, 15:20:50 »
смотря для чего вам
Для инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем
Я не пользовался структурами, но немного погуглив понимаю - то что вы хотите - нереализуемо. Используйте класс

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #115 : 12-12-2017, 15:25:40 »
Для инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем
но немного погуглив понимаю
А я совершенно не понимаю: при чём тут проверка значений и инициализация полей структуры? Проверка значений может выполняться сразу после их ввода, ещё до каких-то инициализаций. Структура, также, может содержать метод проверки своих внутренних значений на корректность. Если Александр понял о чём Вы, то ему полагается орден Ванги 1-й степени :)

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #116 : 12-12-2017, 15:32:19 »
Структура, также, может содержать метод проверки своих внутренних значений на корректность
Я сначала попробовал и у меня не получилось. Студия сразу заругалась)
Для структуры можно задать только конструктор с параметрами и при этом имена параметров должны полностью повторять имена полей в структуре. Проверку введенных данных можно сделать, но обязательно так, чтобы поле в любом случае получило значение
Код - C# [Выбрать]
  1. struct Book
  2. {
  3.     public string name;
  4.     public string author;
  5.     public int year;
  6.  
  7.     public Book(string name, string author, int year)
  8.     {
  9.         this.name = name;
  10.         this.author = author;
  11.         if (year < 3000)
  12.             this.year = year;
  13.         else this.year = 3000;
  14.     }
  15.  
  16.     public void Info()
  17.     {
  18.         Console.WriteLine($"Книга '{name}' (автор {author}) была издана в {year} году");
  19.     }
  20. }

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #117 : 12-12-2017, 15:36:51 »
Проверка значений может выполняться сразу после их ввода, ещё до каких-то инициализаций
Да, точно, я торможу. Спасибо.
Для структуры можно задать только конструктор с параметрами
Конструктор использовать не хочу именно потому, что туда надо передавать кучу параметров.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #118 : 12-12-2017, 15:40:23 »
Для структуры можно задать только конструктор с параметрами
Да, это так. Т.к. конструктор без параметров у неё всегда есть "по умолчанию".
и при этом имена параметров должны полностью повторять имена полей в структуре
А вот это не верно. В конструкторе должны задаваться значения всех полей, но это никак не связано с составом и именами параметров.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #119 : 12-12-2017, 15:44:56 »
А вот это не верно.
Да, наврал. Но у меня студия ругалась, когда я пробовал. И теперь не знаю на что... Ну в общем - хрен с ней) С вопросом разобрались

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #120 : 19-12-2017, 15:18:32 »
Здравствуйте!
Пытаюсь перейти на C# после VBA, не понятен такой момент:  в VBA можно было писать много модулей, взаимодействующих между собой, в результате компиляции получался один dvb файл. А на C# каждый файл .cs компилируется в свою сборку? Если я хочу разнести программу на логические части, как правильно сделать: делать многофайловую сборку из нескольких .cs файлов или есть какой то ещё вариант?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #121 : 19-12-2017, 15:22:06 »
Здравствуйте!
Пытаюсь перейти на C# после VBA, не понятен такой момент:  в VBA можно было писать много модулей, взаимодействующих между собой, в результате компиляции получался один dvb файл. А на C# каждый файл .cs компилируется в свою сборку? Если я хочу разнести программу на логические части, как правильно сделать: делать многофайловую сборку из нескольких .cs файлов или есть какой то ещё вариант?
Что-то страшное вы рассказываете)
Если вы используете Visual Studio, то просто создаете проект, в свойствах которого ставите "библиотека классов", добавляете столько cs файлов, сколько вам нужно и компилируете - на выходе получите одну dll

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #122 : 19-12-2017, 15:26:30 »
проект, в свойствах которого ставите "библиотека классов"
А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #123 : 19-12-2017, 15:27:07 »
проект, в свойствах которого ставите "библиотека классов"
А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?
Нет. Проект всегда компилируется во что-то одно

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #124 : 19-12-2017, 15:29:44 »
А на C# каждый файл .cs компилируется в свою сборку?
Расскажите как это Вам удалось.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #125 : 19-12-2017, 15:32:09 »
Проект всегда компилируется во что-то одно
У меня есть классы объявленные в файлах без модификатора доступа , вроде они по умолчанию должны быть internal, и студия по началу вроде не ругается и ничего не подчёркивает, а компилировать не хочет, только с public'ом получается. Вот я и подумала, что может студия видит файлы как разные сборки...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #126 : 19-12-2017, 15:32:29 »
А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?
Не рекомендую использовать консоль. У него есть своя специфика, которая может привести к проблемам с AutoCAD .NET API.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #127 : 19-12-2017, 15:33:10 »
Расскажите как это Вам удалось
Я может что-то не то сказала, только начинаю знакомиться с С#

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #128 : 19-12-2017, 15:33:59 »
Не рекомендую использовать консоль
Использую в целях "быстрого старта" так сказать. Потом, конечно, сделаю по нормальному в виде приложения

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #129 : 19-12-2017, 15:35:08 »
вроде они по умолчанию должны быть internal
Не internal, а private - поэтому из других классов и не видны.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #130 : 21-12-2017, 08:08:26 »
Здравствуйте! Подскажите, пожалуйста, в операторе Swith Case нельзя применять в качестве селектора переменные выражения целого типа (значение заранее неизвестно)?

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #131 : 21-12-2017, 10:33:27 »
низя
Цитировать
switch ( expression ) 
   case constant-expression : statement 
   [default  : statement]
как то вы сильно замудрили...

вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>) - Python-Style!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #132 : 21-12-2017, 11:06:28 »
вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>) - Python-Style!
А чем if() не устраивает?

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #133 : 21-12-2017, 11:13:36 »
Цитировать
А чем if() не устраивает?
не хочится длиную портянку использовать

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #134 : 21-12-2017, 11:16:33 »
вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>)
Мне вот только не понятно, как...
У меня в общем цикл, количество итераций count зависит от ввода пользователя. В теле для каждого элемента выполняется стандартный алгоритм один и тот же, только для первого и последнего элемента (он же count) есть дополнительные действия. Если использовать If, то часть кода (стандартный алгоритм) придётся повторно писать, чего не хотелось бы. В VBA такой проблемы не было
В принципе, в ветке default, можно попробовать один if дописать

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #135 : 21-12-2017, 11:18:07 »
вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>)
Мне вот только не понятно, как...
У меня в общем цикл, количество итераций count зависит от ввода пользователя. В теле для каждого элемента выполняется стандартный алгоритм один и тот же, только для первого и последнего элемента (он же count) есть дополнительные действия. Если использовать If, то часть кода (стандартный алгоритм) придётся повторно писать, чего не хотелось бы. В VBA такой проблемы не было
Для count можно использовать case switch

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #136 : 21-12-2017, 11:18:23 »
Цитировать
Если использовать If, то часть кода (стандартный алгоритм) придётся повторно писать
так ты его в отдельную функию вынеси

Цитировать
Для count можно использовать case switch
нельзя, получишь "constant value is expected"

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #137 : 21-12-2017, 11:27:18 »
нельзя, получишь "constant value is expected"
Да, именно это я и получаю

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #138 : 21-12-2017, 11:35:52 »
Без примера кода сложно рассуждать

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #139 : 22-12-2017, 21:22:41 »
Здравствуйте!
Встал вопрос о сохранении объектов в контейнер. Смотрю в сторону использования хеш-таблицы. В качестве ключа планируется использовать структуры с большим количеством полей разных простейших типов (не ссылочных). Как пишут, надо переопределять методы GetHashCode и Equals. Подскажите, пожалуйста, если ключом является структура , надо ли переопределять? если надо, то нормальным ли будет вариант получить конкатенацию из строковых представлений всех полей, или может кто ещё что посоветует. А может и вообще использовать что-то другое в качестве хранилища?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #140 : 23-12-2017, 14:40:14 »
В качестве ключа планируется использовать структуры с большим количеством полей разных простейших типов (не ссылочных).
Ключа или данных?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #141 : 23-12-2017, 14:47:33 »
Ключа или данных?
ДА. Так можно? ли это не лучший вариант

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #142 : 23-12-2017, 14:58:37 »
Ключа или данных?
ДА. Так можно? ли это не лучший вариант
Если честно, то мне не приходилось видеть, чтобы в качестве ключа использовали сложную структуру. Обычно ключ это что-то простое (адрес, число, строка, ObjectId), а вот значение может быть сложной структурой/экземпляром класса.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #143 : 23-12-2017, 15:06:48 »
У меня объект создаётся на основе геометрических свойств, которые записаны в структуру; объект должен быть уникальным, поэтому предполагается взять хеш-таблицу в качестве хранилища уже созданных объектов, а по ключу - структуре определять, был ли создан экземпляр с такими геометрическими свойствами. Я просто не программист, не имею специального образования, поэтому сложновато разбираться.

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #144 : 24-12-2017, 14:53:12 »
Кроме как переопределить метод ToString() структуры (чтобы формировал пары "поле"-значение в строку и в конце сделать конкатенацию строк) и вызвать на результате GetHashCode() класса String , ничего не приходит в голову. Буду пока так пробовать

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #145 : 24-12-2017, 16:10:24 »
Кроме как переопределить метод ToString() структуры (чтобы формировал пары "поле"-значение в строку и в конце сделать конкатенацию строк) и вызвать на результате GetHashCode() класса String , ничего не приходит в голову. Буду пока так пробовать
Я тоже не вижу лучшего пути.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #146 : 24-12-2017, 16:31:06 »
А не подскажите ещё: как я поняла, механизм метода Hashtable.Add() вычисляет хеш код ключа и смотрит, если есть уже в таблице такой код, то сам (?) вызывает Equals , сравнивая содержимое объектов? И я недопоняла?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #147 : 24-12-2017, 16:36:57 »
А не подскажите ещё: как я поняла, механизм метода Hashtable.Add() вычисляет хеш код ключа и смотрит, если есть уже в таблице такой код, то сам (?) вызывает Equals , сравнивая содержимое объектов? И я недопоняла?
https://msdn.microsoft.com/ru-ru/library/system.collections.hashtable.add(v=vs.110).aspx
Если элемент с таким ключом уже есть, то будет исключение ArgumentException. В .NET исключения обрабатываются достаточно медленно. Так что лучше сначала проверить при помощи Hashtable.Contains нет ли еще такого ключа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #148 : 24-12-2017, 16:56:36 »
Если ключ превращать в строку, то проще, наверно, использовать Dictionary<TKey, TValue> . На этом я, наверно , и остановлюсь.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #149 : 25-12-2017, 13:11:45 »
Структуры могут быть ключом словаря, точно так же, как строка. У них, как и всех других объектов, есть метод Equals, который проверяет, совпадают ли значения полей структуры. Если совпадают - то структуры считаются одинаковыми. Этот метод Equals можно переопределить (если нужно, например, сравнивать не все поля). Также, для удобства сравнения и сортировки значений, можно реализовать интерфейс IComparable<T>.
https://msdn.microsoft.com/ru-ru/library/ms131187(v=vs.110).aspx

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #150 : 27-12-2017, 15:40:47 »
Здравствуйте!
Подскажите, пожалуйста, если использовать сначала Dictionary.ContainsKey(key), а потом Dictionary.Add(key,value) не происходит ли двойной поиск  ключа в словаре? или Add не проверяет?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #151 : 27-12-2017, 15:46:05 »
или Add не проверяет?
Add выдаёт исключение, если такой ключ уже есть.
Я в последнее время практически не использую этот метод, как раз из-за того, что нужно сперва проверять наличие ключа. Мне проще так:
Код - C# [Выбрать]
  1. Dictionary<string, int> dict = new Dictionary<string, int>();
  2.  
  3. // Вместо такой конструкции
  4. if (!dict.ContainsKey("item"))
  5. {
  6.     dict.Add("item", 0);
  7. }
  8.  
  9. // Можно написать просто так
  10. dict["item"] = 0;
  11. // Если значение есть, то оно перезапишется. Если нет - создастся новое.
  12. // В большинстве случаев меня такое поведение полностью устраивает
  13.  

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #152 : 27-12-2017, 15:47:52 »
Мне не надо перезаписывать, а наоборот, если есть , то вернуть , что есть, если нет - то записать

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #153 : 27-12-2017, 15:53:30 »
Мне не надо перезаписывать, а наоборот, если есть , то вернуть , что есть, если нет - то записать
Тогда еще проще:
Код - C# [Выбрать]
  1.     Dictionary<string, int> dict = new Dictionary<string, int>();
  2.      
  3.     if (!dict.ContainsKey("item"))
  4.     {
  5.         dict.Add("item", 0);
  6.     }
  7.      
  8.     return dict["item"];
     
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #154 : 27-12-2017, 15:54:26 »
Ну тогда через ContainsKey и Add - самое разумное. Фактически, да, происходит двойная проверка по коллекции ключей: https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/collections/generic/dictionary.cs

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #155 : 27-12-2017, 15:58:36 »
не происходит ли двойной поиск  ключа в словаре?
Так как коллекция упорядоченная, то поиск происходит очень быстро (не последовательным перебором). Так что об этом можно не беспокоиться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #156 : 27-12-2017, 16:05:34 »
Так как коллекция упорядоченная, то поиск происходит очень быстро (не последовательным перебором). Так что об этом можно не беспокоиться.
Вот тут , пожалуйста, поподробней.
Итак, сравнение ключей всё же происходит дважды.

Но, я, как обычно, что то перемудрила, наверно, и пока у меня так:
Код - C# [Выбрать]
  1. class MyCmparer : EqualityComparer<GeometryClass>
  2.     {
  3.         public override bool Equals(GeometryClass x, GeometryClass y)
  4.         {
  5.             if (x == y) { return true; }
  6.             if (x == null || y == null) { return false; }
  7.             if (x.IdentClass != y.IdentClass) { return false; }
  8.  
  9.             return x.Equals(y);
  10.         }
  11.        
  12.         public override int GetHashCode(GeometryClass source) //Переопределяя иквалс, переопредели и гетхешкод
  13.         {
  14. //тут будет код
  15.         }
  16.  
  17.     }
  18.  
  19.  
  20.     interface IGeometry
  21.     {
  22.     }
  23.  
  24.     abstract class GeometryClass : IGeometry, IEquatable <GeometryClass>
  25.     {
  26.         //данные для построения каркасса СБН
  27.         String identClass; // идентификатор конструкции
  28.         internal String IdentClass { get { return identClass; } }
  29.         internal GeometryClass(String value)
  30.         {
  31.             identClass = value;
  32.         }
  33.         public abstract Boolean IEquatable<GeometryClass>.Equals(GeometryClass other);
  34.        
  35.     }

Идей в том, чтобы передать сравнение экземпляров их классам, где метод Equals переопределён так, как мне надо. Код разрабатывается в данный момент ещё не проверялся
« Последнее редактирование: 27-12-2017, 16:12:56 от Александр Ривилис »

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #157 : 27-12-2017, 16:14:19 »
Код - C# [Выбрать]
  1. class DataBaseConcreteProducts // хранит ссылки на экземпляры дерева в хештаблицах в общей базе
  2.     {
  3.         //сделать синглтоном
  4.         private static DataBaseConcreteProducts instance; //ссылка на экземпляр , принадлежит сформированному объекту (т.е. при создании экземпляра будет инициализировано поле объекта)
  5.         internal static DataBaseConcreteProducts GetDataBase() //метод для создания единственного объекта
  6.         {
  7.             if (instance != null)
  8.             { instance = new DataBaseConcreteProducts(); }
  9.             return instance;
  10.  
  11.         }
  12.         Dictionary<GeometryClass, Object > dataBase;
  13.         internal Dictionary<GeometryClass, Object> DataBase { get { return dataBase; } }
  14.  
  15.         internal void Add(GeometryClass key, Object product)
  16.         {
  17.             if (dataBase.ContainsKey(key)) { return dataBase[key]; }
  18.             else { dataBase.Add(key, product); }
  19.         }
  20.         internal Boolean Remove(GeometryClass key)
  21.         {
  22.             if (key != null || dataBase.ContainsKey(key)) { dataBase.Remove(key); return true; }
  23.             else { return false; }
  24.         }
  25.  
  26.         protected DataBaseConcreteProducts() //защищённый конструктор
  27.         {
  28.             dataBase = new Dictionary<GeometryClass , Object >();
  29.         }
  30.     }
« Последнее редактирование: 27-12-2017, 16:15:30 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #158 : 27-12-2017, 16:15:06 »
Мурена
Про правильное форматирование у нас на форуме смотрите у меня в подписи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #159 : 27-12-2017, 16:17:09 »
Александр Ривилис,
Да, спасибо!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #160 : 27-12-2017, 16:18:51 »
Вот тут совершенно неправильно:
Код - C# [Выбрать]
  1. internal void Add(GeometryClass key, Object product)
  2.         {
  3.             if (dataBase.ContainsKey(key)) { return dataBase[key]; }
  4.             else { dataBase.Add(key, product); }
  5.         }
Разберитесь в типе возвращаемого значения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #161 : 27-12-2017, 16:25:15 »
Да, вижу, вот думаю, что надо изменить, чтобы два раза не выполнялась проверка ключа, а тип возвращаемого значения тоже обдумывается. Вроде не особо хорошо писать у Add какой то тип возвращаемого параметра, может поменять название метода на что то типа GetObject, но вроде возвращать ссылку на то, что посылаю как параметр тоже не особо.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #162 : 27-12-2017, 16:29:19 »
что надо изменить, чтобы два раза не выполнялась проверка ключа
Не обращайте внимания. В крайнем случае используйте SortedDictionary<> вместо Dictionary<>
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #163 : 27-12-2017, 16:37:35 »
Есть еще метод TryGetValue:   
Код - C# [Выбрать]
  1. internal Object GetOrAdd(GeometryClass key, Object product)
  2. {
  3.        object val = null;
  4.        if (dataBase.TryGetValue(key, out val)) {
  5.           return val;
  6.       } else {
  7.           return (dataBase[key] = product);
  8.       }
  9. }
Код не проверял, но идея должна быть понятна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Мурена

  • ADN OPEN
  • **
  • Сообщений: 53
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #164 : 28-12-2017, 00:35:52 »
Александр Ривилис,
Спасибо, немного видоизменила, это то, что нужно

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 452
  • Карма: 1
Re: Оффтопик. Изучаем C#
« Ответ #165 : 25-05-2018, 19:55:58 »
Здравствуйте!
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else. В чем я неправ?
Код - C# [Выбрать]
  1. public class FormatsHandler
  2.    {
  3.         static double height;
  4.         static double width;
  5.  
  6.         static List<Format> listOfFormats = new List<Format>()
  7.       {
  8.       new Format(){ formatID="A4", height=297, width=210},// все в портретной ориентации
  9.       new Format(){ formatID="A3", height=420, width=297},
  10.       new Format(){ formatID="A2", height=594, width=420},
  11.       new Format(){ formatID="A1", height=841, width=594},
  12.       new Format(){ formatID="A0", height=1189, width=841}
  13.       };
  14.  
  15.         //Points of inner frame
  16.         Point2d keyPoint1 = new Point2d(-width + 25, height - 10);
  17.         Point2d keyPoint2 = new Point2d(0, height - 10);
  18.         Point2d keyPoint3 = new Point2d(0, 0);
  19.         Point2d keyPoint4 = new Point2d(-width + 25, 0);
  20.         //Points of outer frame
  21.         Point2d frPoint1 = new Point2d(-width + 5, height - 5);
  22.         Point2d frPoint2 = new Point2d(5, height - 5);
  23.         Point2d frPoint3 = new Point2d(5, -5);
  24.         Point2d frPoint4 = new Point2d(-width + 5, -5);
  25.  
  26.  
  27.         [CommandMethod("2Insert title")]
  28.  
  29.         public static void DrawTitles()
  30.         {
  31.             Format curFormat = GetDataFromUser();
  32.  
  33.  
  34.             if (curFormat.formatID == "A3" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  35.             {
  36.                 height = listOfFormats[1].height;
  37.                 width = listOfFormats[1].width;
  38.             }
  39.             else if(curFormat.formatID == "A3" && curFormat.orientation == "Landscape" && curFormat.type == "Title")
  40.             {
  41.                 height = listOfFormats[1].width;
  42.                 width = listOfFormats[1].height;
  43.             }
  44.  
  45. //                else if (curFormat.formatID == "A2" && curFormat.orientation == "Portrait" && curFormat.type == "Title")
  46. //                {
  47. //                height = listOfFormats[2].height;
  48. //                width = listOfFormats[2].width;
  49. //                }
  50. //else
  51. //            {
  52. //                height = listOfFormats[2].width;
  53. //                width = listOfFormats[2].height;
  54. //            }
  55.  
  56.  
  57.            
  58.  
  59.  
  60.  
  61.             FormatsHandler fh = new FormatsHandler();
  62.             fh.DrawMainTitle();
  63.  
  64.         }
  65.  
  66.         public static Format GetDataFromUser()
  67.         {
  68.             Document acDoc = Application.DocumentManager.MdiActiveDocument;
  69.  
  70.             //Выбрать формат
  71.             PromptKeywordOptions chFormat = new PromptKeywordOptions("\nChoose format: ");
  72.  
  73.             chFormat.Keywords.Add("A4");
  74.             chFormat.Keywords.Add("A3");
  75.             chFormat.Keywords.Add("A2");
  76.             chFormat.Keywords.Add("A1");
  77.             chFormat.Keywords.Add("A0");
  78.             chFormat.AllowNone = false;
  79.  
  80.             PromptResult formatID = acDoc.Editor.GetKeywords(chFormat);
  81.             //Application.ShowAlertDialog("The name entered was: "+formatID.StringResult);
  82.  
  83.             //Установить кратность
  84.             PromptStringOptions chMultiplier = new PromptStringOptions("\nSet multiplier: ");
  85.             chMultiplier.AllowSpaces = false;
  86.             PromptResult multiplier = acDoc.Editor.GetString(chMultiplier);
  87.  
  88.  
  89.             // Установить ориентацию
  90.             PromptKeywordOptions chOrient = new PromptKeywordOptions("\nSet orientation: ");
  91.  
  92.             chOrient.Keywords.Add("Portrait");
  93.             chOrient.Keywords.Add("Landscape");
  94.             chOrient.Keywords.Default = "Landscape";
  95.             chOrient.AllowNone = false;
  96.  
  97.             PromptResult orientation = acDoc.Editor.GetKeywords(chOrient);
  98.  
  99.  
  100.             // Установить тип
  101.             PromptKeywordOptions chType = new PromptKeywordOptions("\nSet type: ");
  102.  
  103.             chType.Keywords.Add("Title");
  104.             chType.Keywords.Add("Regular");
  105.             chType.Keywords.Default = "Regular";
  106.             chType.AllowNone = false;
  107.  
  108.             PromptResult type = acDoc.Editor.GetKeywords(chType);
  109.  
  110.  
  111.             Format curFormat = new Format()
  112.             {
  113.                 formatID = formatID.ToString(),
  114.                 multiplier = int.Parse(multiplier.StringResult),
  115.                 orientation = orientation.ToString(),
  116.                 type = type.ToString()
  117.             };
  118.  
  119.             return curFormat;
  120.  
  121.         }
  122.  
  123.         public void DrawMainTitle()
  124.         {
  125.  
  126.         }
  127.  
 
« Последнее редактирование: 25-05-2018, 21:09:39 от Atomohod »

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #166 : 26-05-2018, 10:56:52 »
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else.
А как проявляется это самое "не срабатывает"?

Оффлайн Atomohod

  • ADN OPEN
  • ****
  • Сообщений: 452
  • Карма: 1
Re: Оффтопик. Изучаем C#
« Ответ #167 : 26-05-2018, 11:58:25 »
Рамки рисуются каким-то невероятным образом, хотя при жестком указании height и width все отрабатывает нормально. Проблема в том, что нужно изменение поведения программы в зависимости от пользовательского ввода. Пытался реализовать не через if else, а через switch - тоже не срабатывало-я пролетал на default минуя все case, но там хотя бы рисовалась рамка для дефолтного формата, а через if вообще какая-то ерунда.


Может я что-то упустил в структуре программы или не так записал в синтаксисе?
На форуме мне предлагали способ со вставкой форматки из готового блока в dwg, я с ним согласен, но задачу мне поставили по- другому поэтому все надо через dll.

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #168 : 16-06-2018, 15:49:52 »
Здравствуйте. Проблема в задании стилей для WPF. Хочется сделать это централизовано как в обычном WPF приложении. Но так как вынужден делать через библиотеку классов, не получается подключить ResourseDictionary со стилями, так же просто (обычно это делал через App.xaml), но в библиотеке классов нет такой возможности. Есть ли решение этой проблемы?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #169 : 16-06-2018, 17:27:39 »
Есть ли решение этой проблемы?
Если я правильно понял вопрос, то может это подойдёт:
https://stackoverflow.com/questions/19270018/wpf-style-for-control-library
https://stackoverflow.com/questions/9739032/set-up-application-resources-from-code
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #170 : 17-06-2018, 12:43:40 »
Есть ли решение этой проблемы?
Если я правильно понял вопрос, то может это подойдёт:
https://stackoverflow.com/questions/19270018/wpf-style-for-control-library
https://stackoverflow.com/questions/9739032/set-up-application-resources-from-code

Благодарю, попробую эти решения!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #171 : 17-06-2018, 13:14:01 »
Здравствуйте. Проблема в задании стилей для WPF. Хочется сделать это централизовано как в обычном WPF приложении. Но так как вынужден делать через библиотеку классов, не получается подключить ResourseDictionary со стилями, так же просто (обычно это делал через App.xaml), но в библиотеке классов нет такой возможности. Есть ли решение этой проблемы?
Все там замечательно подключается и работает!
Во-первых - посмотрите как нужно использовать URI типа Pack (это то, что вам и нужно)
Во-вторых - смотрите готовые библиотеки оформления и инструкции к ним. Например, Mahapps Metro отлично демонстрирует как следует подключать xaml-ресурсы:
Код - XML [Выбрать]
  1. <Application x:Class="WpfApplication.App"
  2.             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.             StartupUri="MainWindow.xaml">
  5.   <Application.Resources>
  6.     <ResourceDictionary>
  7.       <ResourceDictionary.MergedDictionaries>
  8.         <!-- MahApps.Metro resource dictionaries. Make sure that all file names are Case Sensitive! -->
  9.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
  10.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
  11.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
  12.         <!-- Accent and AppTheme setting -->
  13.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
  14.         <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
  15.       </ResourceDictionary.MergedDictionaries>
  16.     </ResourceDictionary>
  17.   </Application.Resources>
  18. </Application>

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #172 : 17-06-2018, 13:39:20 »
Саня, твой вариант подходит для своего WPF приложения.
А автокад это не WPF приложение. У него System.Windows.Application.Current пустое.
Один раз такое пробовал:
Код - C# [Выбрать]
  1.              if (System.Windows.Application.Current == null)
  2.             {
  3.                 new System.Windows.Application {ShutdownMode = ShutdownMode.OnExplicitShutdown};
  4.             }
  5.             System.Windows.Application.Current.Resources.MergedDictionaries.Add(System.Windows.Application.LoadComponent(
  6.                     new Uri("AcadTest;component/Style.xaml", UriKind.Relative)) as ResourceDictionary);
Рисковый вариант. Т.к. может подействовать на весь интерфейс автокада:



Мне кажется, правильнее сделать файл стилей и подгружать его в свои окна или контролы:
     
Код - XML [Выбрать]
  1.     <Window.Resources>
  2.         <ResourceDictionary>
  3.             <ResourceDictionary.MergedDictionaries>
  4.                 <ResourceDictionary Source="Resources/Style.xaml" />
  5.             </ResourceDictionary.MergedDictionaries>
  6.         </ResourceDictionary>
  7.     </Window.Resources>
Можно через базовый класс. Я так и делаю.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #173 : 17-06-2018, 13:46:09 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #174 : 17-06-2018, 17:42:41 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает

Благодарю, весь сыр бор как раз чтобы не подключать каждому окну, а делать это в 1 месте.  Да и темы из библиотек не подхватывает автоматом, надо прописывать. Думал что можно проще, но проще не запариваться с красивостями)

Оффлайн Kisli

  • ADN OPEN
  • Сообщений: 10
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #175 : 17-06-2018, 17:46:39 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает
Благодарю!

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #176 : 01-09-2018, 21:46:58 »
Здравствуйте. подскажите пожалуйста.
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
пока что приходится каждый раз компилировать , затем открывать автокад, подгружать dll, и только затем тестировать.
при попытке скомпилировать измененный код выдает ошибку. закрыв автокад все норм.
спасибо!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #177 : 01-09-2018, 23:31:53 »
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
По простому - нет.
Если очень хочется - можете попробовать динамическое прототипирование

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #178 : 03-09-2018, 08:13:29 »
работая в visual studio c# возможно ли проверять код не перезапуская автокад?
Есть такой вариант https://github.com/vildar82/AcadAddinManager
Каждый раз, грузится новая сборка и через рефлексию запускается метод выбранной команды.
Работает, примерно, как AddinManager в Revit.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #179 : 11-11-2018, 21:19:29 »
Здравствуйте.
Наверное здесь не в тему, но больше некуда. Вы самые общительные - выручайте!
такая проблема
в WinForm следующий код работает:

Код - C# [Выбрать]
  1. private void listBoxFiles_DragEnter(object sender, DragEventArgs e)
  2.         {
  3.             if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  4.             {
  5.                 e.Effect = DragDropEffects.All;
  6.             }
  7.         }

а аналогичный в WPF (за исключение вместо Effect там будет Effects ) не работает:

Код - C# [Выбрать]
  1. private void listBoxFiles_DragEnter(object sender, DragEventArgs e)
  2.         {
  3.             if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
  4.             {
  5.                 e.Effects = DragDropEffects.All;
  6.             }
  7.         }

что я не так делаю?

нужно чтоб он позволял перетаскивать только файлы. а на него эти строчки никак не влияют. что с ними что без. разрешает тащить и файлы и текст все подряд.

Спасибо!

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #181 : 11-11-2018, 22:02:55 »
где там ответ?
там получают файлы.
а мне нужно запретить пихать в листбокс все кроме файлов.
и в конце концов интересно почему выставляя effects=none ничего не меняется и я все равно могу что угодно дропать в лист(

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #182 : 11-11-2018, 22:05:53 »
где там ответ?
там получают файлы.
а мне нужно запретить пихать в листбокс все кроме файлов.
и в конце концов интересно почему выставляя effects=none ничего не меняется и я все равно могу что угодно дропать в лист(
Используйте не DragEnter, а DragOver

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #183 : 11-11-2018, 22:22:28 »
ничего не меняется.
я думаю не в событии дело
а в этом Effects
я назначаю ему значение none  но ничего не происходит.

 а в winform пока я не дам значение all не смогу ничего дропнуть.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #184 : 11-11-2018, 22:27:13 »
Вот нашел пример:
Код - C# [Выбрать]
  1. /// <summary> Event, which is called, when dragged file enters form </summary>
  2. private void UIElement_OnDragEnter(object sender, DragEventArgs e)
  3. {
  4.     if (e.Data.GetDataPresent(DataFormats.FileDrop))
  5.     {
  6.         e.Effects = DragDropEffects.All;
  7.     }
  8.     else
  9.     {
  10.         e.Effects = DragDropEffects.None;
  11.     }
  12. }

Пишут, что работает. Если у вас не работает, то, видимо, проблема где-то в другом месте

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #185 : 11-11-2018, 22:36:06 »
для winform да работает
при чем если вовсе убрать этот обработчик то не разрешает дропать.
в WPF же что с ним что без 0 реакции

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #186 : 11-11-2018, 22:38:39 »
еще такая проблема
в начале выполнении операции я меняю текст кнопки информирую что процесс пошел. по окончании возвращаю значение обратно.
но по факту ничего не меняется будто не изменял  текст кнопки. но если я не возвращаю первоначальное значение то оно меняется но после выполнения операции.
т е он настолько загружен что не может отобразить изменения?

в winform такая стратегия работает.


Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #187 : 11-11-2018, 22:58:43 »
решил проблему! во первых, как вы сказали запихал все в событие over, во вторых, добавил одну волшебную строчку (e.Handled = true;), в третьих я (в отличии от любимых winform) не разрешал дропать, присваивая значение all, а запрещал, присваивая none.
вот рабочий код

Код - C# [Выбрать]
  1. private void listBoxFiles_DragOver(object sender, DragEventArgs e)
  2.         {
  3.             if (!e.Data.GetDataPresent(DataFormats.FileDrop, false))
  4.             {
  5.                 e.Effects = DragDropEffects.None;
  6.                 e.Handled = true;
  7.             }
  8.         }

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #188 : 25-03-2019, 13:14:08 »
Возник вопрос касательно класса FileSystemWatcher.
можно ли им пользоваться, если дело касается сетевых дисков? попробовал прописать путь к сетевому диску, но в итоге он просто не реагирует на изменения
с локальным диском все работает

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #189 : 25-03-2019, 14:41:02 »
Возник вопрос касательно класса FileSystemWatcher.
можно ли им пользоваться, если дело касается сетевых дисков?
У меня с этим не было проблем.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #190 : 25-03-2019, 14:44:34 »
Наверное важное уточнение: по факту это облако, представленное сетевым диском.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #191 : 25-03-2019, 14:49:46 »
Ну тут надо смотреть как это облако работает. По идее, все облачные хранилища, которые я встречал, имеют папку-буфер на жёстком диске. А эта папка синхронизируется с облачным хранилищем. Вот если к этой папке подключиться - то мониторинг будет работать.

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #192 : 26-03-2019, 13:05:10 »
пойдя чуть дальше пробую читать файл из облака и сравнивать побайтово с локальной копией
и видимо скачанные из облака файлы чем то отличаются (датой как минимум)? но у всех файлов после 15000 байта начинаются различия, хотя файлы только что скопированы и не изменялись...
соответственно файлы меньшего размера (по 14000 байтов) считаются одинаковыми
как тогда ты корректно сравнить?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #193 : 26-03-2019, 13:07:17 »
simson43,
А что за облако?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #194 : 26-03-2019, 13:07:38 »
SharePoint

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #195 : 26-03-2019, 13:09:57 »
Насколько я знаю, у него есть свой API. Может в нём есть нужные инструменты?

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #196 : 26-03-2019, 13:20:01 »
через него я и получил Stream
а вот аналога FileSystemWatcher не нашел(

Оффлайн simson43

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: Оффтопик. Изучаем C#
« Ответ #197 : 26-03-2019, 16:09:14 »
до этого я считывал асинхронно
Код - C# [Выбрать]
  1. await locStream.ReadAsync(locBytes, 0, length);
а если же считывать синхронно побайтно
Код - C# [Выбрать]
  1.  while (true)
  2.             {
  3.                 int lVal = locStream.ReadByte();
  4.                 int sVal = spStream.ReadByte();
  5.  
  6.                 if (lVal == -1 && sVal == -1)
  7.                     return true;
  8.  
  9.                 if ( lVal != sVal)
  10.                     return false;
  11.             }
То такой ситуации не возникает. И одинаковость файлов определяется корректно.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #198 : 26-03-2019, 16:20:29 »
То такой ситуации не возникает. И одинаковость файлов определяется корректно.
Ну видимо для этого потока асинхронное считывание недопустимо...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #199 : 29-05-2020, 19:39:12 »
Такой вопрос: нельзя ли как-то в Visual Studio скомпилировать одну dll из двух проектов?
Или сделать общую папку кода для нескольких проектов?
Поясню зачем мне это. У меня пачка плагинов и в итоге 48 проектов в решении. Когда добавляю еще один файл кода общего назначения, то приходится делать ссылку на него в каждом проекте вручную. Очень утомляет. Хочу добавлять файл в одно место, в один проект или папку и чтоб он таким образом добавился во все проекты.
Выделить общий код в отдельную dll - не вариант по многим причинам, нужна единая dll для каждого плагина.
Догадываюсь, что так не получится....

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #200 : 29-05-2020, 19:51:27 »
avc,
Похоже, что ближе всего к тому, что ты хочешь вот это: https://docs.microsoft.com/en-us/visualstudio/msbuild/how-to-use-the-same-target-in-multiple-project-files?view=vs-2019
Но насколько тебе это будет удобно использовать - это вопрос.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #201 : 29-05-2020, 22:55:00 »
avc,
https://docs.microsoft.com/ru-ru/visualstudio/msbuild/customize-your-build?view=vs-2019
может попробовать Directory.Build.props, в котором указать папку для компиляции всех файлов в ней. я не пробовал так. но может можно.
Если я правильно понял, нужно добавить cs файл во все проекты в решении. По идее может срабоать.
Т.е. выделить общую папку для общих cs файлов для всего решения и загнать их через файл Directory.Build.props.
Щас я даже попробую

Вот так по одному файлу работает - ссылкой добавляется во все проекты.
Но, наверно, можно как то папку указать и все файлы *.cs оттуда.
Код - XML [Выбрать]
  1. <Project>  
  2.   <ItemGroup>
  3.     <Compile Include="$(SolutionDir)\Common\Data.cs">
  4.       <Link>Data.cs</Link>
  5.     </Compile>
  6.   </ItemGroup>
  7. </Project>

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #202 : 31-05-2020, 22:20:15 »
может попробовать Directory.Build.props
Попробовал. Получилось. В самом деле можно переместить все линки на исходники в Directory.Build.props и проект будет компилироваться. И можно создать сколько угодно файлов .targets с такими же ссылками. Только придется в ручную прописать эти таргеты в csproj. Так тоже работает. Но есть один нюанс... обозреватель решений в VS вообще никак не показывает ни файлы с кодом, ни targets... Т.е. можно вообще пустой проект оставить, но он будет компилироваться!! Выглядит как шаманство. Работать с таким проектом невозможно - ни как файл не открыть. Думаю оставить один нормальный проект. Но боюсь потерять контроль, что там компилируется в остальных проектах...
Но насколько тебе это будет удобно использовать - это вопрос.
В таком виде, без поддержки визуальных редакторов VS, - да, удобство под большим вопросом...

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #203 : 06-06-2020, 10:28:14 »
Ссылки на cs файлы хранятся в файлах csproj. Можно программно пробежаться по папкам решения, найти нужные csproj, открыть, внести нужные данные о ссылочных файлах. Как вариант - консольное приложение с конфиг-файлом настроек.
Я как-то написал похожий "ленивчик", только на WPF, для автоматизации рутины при сборке. Пару дней на написание потратил и уже года два пользуюсь. Запустил, проверил настройки, выбрал галочками нужные решения. Далее приложение пробегает по файлам, генерирует и выставляет номер версии и ProductCode новые, собирает инсталляторы и пушит изменения в репозиторий гит.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #204 : 06-06-2020, 11:20:10 »
Можно программно пробежаться по папкам решения
Да можно и не программно - Notepad++ прекрасно подменяет текст в любом количестве файлов заданного типа. В случаях переименования я только так и делаю. Но я искал более удобные встроенные возможности самой VS. И они даже нашлись, вот только реализация... не очень.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #205 : 19-08-2020, 11:36:37 »
Подскажите пожалуйста, во время отладки плагинов над Автокадом появляется вот такая раздражающая менюшка:

Похоже, что это отладчик VS рисует. Но ни одна кнопка не работает и ни на что не влияет. Что это такое? Как отключить? Или еще лучше - как использовать для дела?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #206 : 19-08-2020, 11:45:45 »
Тоже обратил внимание, на появление такой менюшки. Кажется она появилась с VS 2017, и в предыдущих версиях её не было (возможно при каком-то из обновлений). Не пользуюсь и стараюсь не обращать внимание.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Оффтопик. Изучаем C#
« Ответ #207 : 19-08-2020, 11:48:33 »
Это настраивается в опциях отладки в VS:


Смысл иногда есть - на элементы окна потыкать.
Удобно изменение разметки во время отладки.
Редко пользуюсь.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #208 : 19-08-2020, 12:00:32 »
Сейчас сам дошел: нажал одну из кнопок, студия показала какую-то незнакомую панель а в ней что-то про XAML. По этому слову нашел настройку. В русской студии кнопка отключения выглядит так:

Почитал в Wiki про этот XAML - похоже это другое название для форм WPF. Да? Тогда понятно почему оно ни как не работает ни в Автокад, ни в моих панельках WinForms...

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #209 : 19-08-2020, 12:13:16 »
Цитировать
Почитал в Wiki про этот XAML - похоже это другое название для форм WPF.
не совсем, у WinForms есть .Designer.cs - где находится код генерации формы, его можно править ручками, но так как он автогенерируется - лучше этого не делать
XAML выполняет ту же роль, но только редактирование WPF подразумевает в первую очередь редактирование XAML   
XAML более читаемый, чем .Designer.cs. А ещё с ним удобно делать copy/past

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #210 : 19-08-2020, 12:22:42 »
Спасибо. Я как-то так и представлял. Но похоже эта менюшка не в курсе про WinForms.

Кстати .designer.cs редактирую ежедневно и без всяких проблем. Это часто удобнее чем в визуальном редакторе. Иногда незаменимо - редактор, например, не умеет менять местами докированные панельки. Да и не запускается он пока весть код всех предков не перекомпилируется. Собственно по этому и пользуюсь WinForm - все на C#, изучать другие языки нет необходимости, переключать мозг на другой синтаксис не надо. Обалденно круто придумано :)

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #211 : 19-08-2020, 12:25:05 »
всё равно WPF удобней WinForms
а учить языки - полезно для мозгов
XAML ещё и более компактен

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #212 : 25-10-2020, 22:33:22 »
Или еще лучше - как использовать для дела?
Очень клевая фича, кстати! Можно изменять разметку окон прям на живую во время отладки и сразу видеть результат. Конечно, с плагинами не прокатит, хотя вроде тоже получалось.
А еще через неё можно просматривать дерево элементов окна, что может быть полезным при динамических шаблонах.
И еще там много каких-то полезностей

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #213 : 06-02-2021, 11:03:50 »
Всех приветствую.
Кто-нибудь тут пользуется Regex? Я не могу решить задачу  с помощью только одного Match.
Есть строки типа "A1=A3", "A1-10", "SF10", "01.XT5". Мне нужно получить вот такие группы соответственно: (A1=A)(3), (A1-)(10), (SF)(10), (01.XT)(5).
Не хватает мозгов чтобы написать паттерн для всех случаев. Пока только сделал вот такой костыль:
Код - C# [Выбрать]
  1. string str = "A1=A3";
  2. string number = Regex(str, @"\d+$").Value;
  3. string device = str.TrimEnd(number.ToCHarArray());

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #214 : 06-02-2021, 12:04:11 »
Всех приветствую.
Кто-нибудь тут пользуется Regex? Я не могу решить задачу  с помощью только одного Match.
Есть строки типа "A1=A3", "A1-10", "SF10", "01.XT5". Мне нужно получить вот такие группы соответственно: (A1=A)(3), (A1-)(10), (SF)(10), (01.XT)(5).
Не хватает мозгов чтобы написать паттерн для всех случаев. Пока только сделал вот такой костыль:
Код - C# [Выбрать]
  1. string str = "A1=A3";
  2. string number = Regex(str, @"\d+$").Value;
  3. string device = str.TrimEnd(number.ToCHarArray());

Одна минута гугла и тыц - вот ответ.

И проверка:



Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #215 : 06-02-2021, 19:14:46 »
Всех приветствую.
Кто-нибудь тут пользуется Regex? Я не могу решить задачу  с помощью только одного Match.
Есть строки типа "A1=A3", "A1-10", "SF10", "01.XT5". Мне нужно получить вот такие группы соответственно: (A1=A)(3), (A1-)(10), (SF)(10), (01.XT)(5).
Не хватает мозгов чтобы написать паттерн для всех случаев. Пока только сделал вот такой костыль:
Код - C# [Выбрать]
  1. string str = "A1=A3";
  2. string number = Regex(str, @"\d+$").Value;
  3. string device = str.TrimEnd(number.ToCHarArray());

Одна минута гугла и тыц - вот ответ.

И проверка:


Проверил в VS, не работает. Да и не понятно как может работать, если в паттерне указываются только цифровые символы и точка, хотя мне надо получить две группы цифро-буквенно-символьных знаков и цифр. Цифры в конце получаются гораздо легче из примера моего костыля.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #216 : 06-02-2021, 19:18:43 »
Проверил в VS, не работает

На скриншоте отчетливо видно, что паттерн работает. Если вы применить его в коде не можете, то это уже другой вопрос

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #217 : 06-02-2021, 19:27:21 »
Вот вариант с разбивкой на группы:

Код - C# [Выбрать]
  1. (.*?)(\d+(\.\d+)?$)

Тут даже не надо потом мудрить с выниманием нужных данных из строки, так как сразу можно получить две группы



Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #218 : 06-02-2021, 19:29:40 »
Проверил в VS, не работает

На скриншоте отчетливо видно, что паттерн работает. Если вы применить его в коде не можете, то это уже другой вопрос

Что значит не могу? А это что?
Код - C# [Выбрать]
  1. string s1 = "A1=A3";
  2. Match match = Regex.Match(s1, @"d+(\.\d+)?$");
И в match просто "{}".

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #219 : 06-02-2021, 19:33:21 »
Вот вариант с разбивкой на группы:

Код - C# [Выбрать]
  1. (.*?)(\d+(\.\d+)?$)

Тут даже не надо потом мудрить с выниманием нужных данных из строки, так как сразу можно получить две группы


Что это за магический сайт? У него свой Regex? Ни один пример не работает в VS, как не используй класс Regex. Может конечно я что-то не так делаю, но что там делать в 2-3 строчках.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #220 : 06-02-2021, 19:35:10 »
Что это за магический сайт?

https://regex101.com/

Может конечно я что-то не так делаю

Вероятнее всего

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #221 : 06-02-2021, 19:36:01 »
Вероятнее всего
Так, а что может быть не так?

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #223 : 06-02-2021, 19:43:58 »
https://regex101.com/
А где там C#?

А причем тут C#? Regex - это не фича сишарпа

Вот проверил - все работает:



Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #224 : 06-02-2021, 20:00:04 »
https://regex101.com/
А где там C#?

А причем тут C#? Regex - это не фича сишарпа

Вот проверил - все работает:



Спасибо за помощь, но у меня почему-то не работает данный код. Буду разбираться.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #225 : 06-02-2021, 21:24:59 »
Проверил в новом проекте, в Visual Studio Code на винде и линуксе, ни где не работает. Не понимаю, что не так.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #226 : 06-02-2021, 22:27:51 »
Это фиаско. Не заметил, что при копировании с сайта добавились пробелы.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #227 : 08-02-2021, 07:33:49 »
я тоже на этом пару раз спотыкался, в итоге включил отображение табуляции в vs

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #228 : 29-07-2021, 09:04:19 »
Всех приветствую.
Кто-то может объяснить на пальцах, что такое внедрение зависимостей и зачем огород с интерфейсами и их реализацией? Или такое не объяснить на пальцах?
Сколько не читаю разных людей и не смотрю разных примеров, не могу найти практического применения. Или это всё из-за того, что я пока не писал/не видел/не работал на больших проектах где DI даёт преимущество?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #229 : 29-07-2021, 09:21:34 »
Всех приветствую.
Кто-то может объяснить на пальцах, что такое внедрение зависимостей и зачем огород с интерфейсами и их реализацией? Или такое не объяснить на пальцах?
Сколько не читаю разных людей и не смотрю разных примеров, не могу найти практического применения. Или это всё из-за того, что я пока не писал/не видел/не работал на больших проектах где DI даёт преимущество?

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

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #230 : 29-07-2021, 09:26:13 »
При разработке проектов уровня плагинов - это как забивание гвоздей кувалдой. Даже если вы разберетесь с этим, то толку от этого будет ноль
Вполне вероятно. Я просто иногда читаю по C# литературу, смотрю примеры и сталкиваюсь с новыми понятиями/инструментами/подходами и мне становится интересно изучить всё это. И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #231 : 29-07-2021, 09:48:14 »
При разработке проектов уровня плагинов - это как забивание гвоздей кувалдой. Даже если вы разберетесь с этим, то толку от этого будет ноль
Вполне вероятно. Я просто иногда читаю по C# литературу, смотрю примеры и сталкиваюсь с новыми понятиями/инструментами/подходами и мне становится интересно изучить всё это. И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.

Ну если просто на пальцах, то внедрение зависимостей работает примерно так:
При старте приложения создается DI контейнер. В контейнере регистрируются типы. Ну, например, у вас есть класс ClassA и класс ClassB - вы их регистрируете в контейнере.
Далее, при работе вам нужно, чтобы в ClassB использовался ClassA. Для этого вы просто в конструкторе ClassB добавляете аргументом ClassA и все. При работе приложения там контейнер уже сам разберется и внедрит экземпляры нужных классов.
Конечно, там чуть посложнее и есть ряд условий и ограничений

Ну а использование интерфейсов позволяет менять реализации сервисов не меняя кода, использующего интерфейсы. Можно даже в рантайме менять. Например, вы сделали интерфейс IPrinter с методом Print. Можете сделать класс PdfPrinter и класс WordPrinter. Думаю, понятно, что если вы используете в коде интерфейс, то неважно какой экземпляр класса подсунуть - оба работать будут

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #232 : 29-07-2021, 11:18:34 »
И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.
Значит, ещё пока рано браться за такие вещи. Это примерно как браться за изучение высшей математики в начальных классах, когда только-только таблицу умножения выучили. Нужно как-то постепенно к этому приходить. Сперва понять что такое ООП и как им пользоваться. Потом понять, какие проблемы могут возникать и как решают эти проблемы. Тогда будет понятнее, зачем применяют шаблоны (паттерны) и придерживаются принципов (SOLID и т.п.). Поизучать про тестирование приложений и понять, как писать код, который будет легче тестировать. И потом уже должно прийти понимание, что DI (dependency injection) - это довольно полезная штука. Есть и минусы, конечно.
Ну и да - в целом, плагины для CAD-BIM приложений можно писать и без этого, не погружаясь глубоко в эту тему. Но если есть цель расширить сферу деятельности, вырасти именно как .NET-программист, то надо изучать. Например, в ASP.NET Core (разработка веб-приложений) без понимания DI - никак совсем.

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #233 : 29-07-2021, 12:09:01 »
Значит, ещё пока рано браться за такие вещи. Это примерно как браться за изучение высшей математики в начальных классах, когда только-только таблицу умножения выучили. Нужно как-то постепенно к этому приходить. Сперва понять что такое ООП и как им пользоваться. Потом понять, какие проблемы могут возникать и как решают эти проблемы. Тогда будет понятнее, зачем применяют шаблоны (паттерны) и придерживаются принципов (SOLID и т.п.). Поизучать про тестирование приложений и понять, как писать код, который будет легче тестировать. И потом уже должно прийти понимание, что DI (dependency injection) - это довольно полезная штука.
Исходя из этого выходит, что я вообще ничего не понимаю  :'( ;D

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #234 : 29-07-2021, 12:12:28 »
Lemieux, ты не одинок :) Я тоже вообще ничего в C# не понимаю ))
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #235 : 29-07-2021, 12:32:20 »
Исходя из этого выходит, что я вообще ничего не понимаю
Так это нормально. Просто надо учиться и практиковаться. Со временем понимание придёт. Я помню в 2012 году когда первую книгу по C# читал, например, совсем не понимал зачем в языке есть такие вещи как интерфейсы - и так же понятно, что у класса есть такие-то методы и свойства. Зачем дополнительно их выносить в описание без реализации? На крайний случай, есть базовые классы, абстрактные классы. В общем, непонятно было. Потом, когда столкнулся с проблемой при разработке, когда понадобилось сделать одинаковую обработку для совершенно разных классов и даже структур, тогда вспомнил: "о, так есть же интерфейс!". Ну и так со всем остальным.

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #236 : 29-07-2021, 13:53:53 »
Делал интерфейс для работы с данными ГАР. К форме через интерфейс цепляется вьюмодель. Делаю отображение муниципальной иерархии, сделал хитрую форму, а когда уже всё было готово - понял, что мне нужна административная иерархия. Сделал новую вьюмодель для административной иерархии и зарегистрировал её для старого интерфейса - и всё сразу заработало!

Оффлайн Lemieux

  • ADN OPEN
  • ****
  • Сообщений: 376
  • Карма: 21
Re: Оффтопик. Изучаем C#
« Ответ #237 : 29-07-2021, 14:42:36 »
Делаю отображение муниципальной иерархии, сделал хитрую форму
К форме через интерфейс цепляется вьюмодель.
понял, что мне нужна административная иерархия
Сделал новую вьюмодель
Зачем тут прослойка в виде интерфейса? По сути нас это ни от чего не избавило, судя по Вашему сообщению.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Оффтопик. Изучаем C#
« Ответ #238 : 29-07-2021, 16:23:44 »
Зачем тут прослойка в виде интерфейса? По сути нас это ни от чего не избавило
soliD

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Re: Оффтопик. Изучаем C#
« Ответ #239 : 30-07-2021, 07:42:39 »
у меня гуи и вьюмодель в разных проектах и было достаточно изменить регистрацию вьюмодели, проект с гуи даже не надо было перекомпилировать
в принципе можно сделать селектор и использовать обе вьюмодели

Оффлайн Рустем

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Последовательность выбора объекта
« Ответ #240 : 10-10-2021, 09:36:44 »
Здравствуйте. Подскажите почему если мы запишем BlockReference полученный из транзакции  в локальную переменную, а потом попытаемся обратиться к ней также через транзакцию уже в рамках другой функции, то появится ошибка, что объект не может быть открыт для чтения. Я решил для себя эту проблему, просто использую EntityResult.ObjectId из GetEntity. Но как говорится в рамках спортивного интереса. Это тонкости работы CLR или тонкости работы Net??

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #241 : 10-10-2021, 11:12:23 »
попытаемся обратиться к ней также через транзакцию
Это как?
Общее правило - нигде и никогда не хранить никаких объектов, полученных из транзакции (в смысле, вне тела транзакции не хранить). Их хранит транзакция. Если функция маленькая и вызывается часто, то можно передать в нее саму транзакцию и снова получить тот же объект из транзакции - получите ссылку на тот же самый объект, а не новый Entity, никаких выделений памяти и потерь времени. Если надо передавать объекты - то передавайте и храните ObjectId.

Оффлайн Рустем

  • ADN OPEN
  • Сообщений: 8
  • Карма: 0
Последовательность выбора объекта
« Ответ #242 : 10-10-2021, 18:24:00 »
Спасибо за ответ avc. Доступно и понятно. В LISP и VBA таких проблем нет, вот я и удивился. Вот скажем я получил BlockReference, из него BlockTableRecord из него выбрал AttributeReference посредством GetObject.  И вот я добрался до заветных полей "Tag" и  "TextString" и т.д. и все это в рамках одной транзакции. Получается мне нельзя эти поля сохранить, чтобы обратиться к ним из другой функции. В другой функции мне придется опять спускаться из ObjectId. Я не против, правила есть правила, но ведь как то это не совсем то. Вместо одной операции целых четыре. Видимо есть путь получить ссылки на атрибуты не используя транзакцию, записать все поля, потом уже обратиться к ним с использованием транзакции.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #243 : 10-10-2021, 18:30:04 »
И вот я добрался до заветных полей "Tag" и  "TextString" и т.д. и все это в рамках одной транзакции. Получается мне нельзя эти поля сохранить, чтобы обратиться к ним из другой функции.
Ну почему же нельзя. Указанные вами поля имеют тип string - строки можно сохранить. А вот сами наследники DBObject вне рамок транзакции невалидны.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #244 : 10-10-2021, 18:40:40 »
А я и не писал, что нельзя ПЕРЕДАВАТЬ. Нельзя СОХРАНЯТЬ. То есть в какой-то хелпер передать вполне можно. Главное, чтоб объект не сохранился ни в каких списках и полях класса после того, как уничтожена транзакция. Обращение к объекту уничтоженной транзакции - это гарантированный фатал Автокада. Но если вы уверены что ваш метод не оставит ссылок на Entity где-то во вне, то смело можете передавать. То что вы описываете - вполне можно делать с Entity пока не закрыта транзакция.
Извлечение атрибута из транзакции по его Id - это одна операция, а не 4. Почему бы и не передать его Id ?  ObjectId атрибута - это по сути и есть ссылка на атрибут. не такая прямая как вам хочется, зато безопасная.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #245 : 15-02-2023, 14:53:28 »
Подскажите как быть со сторонними библиотеками? Для склеивания pdf использовал библиотеку itext7 добавив через nuget, работает нормально, но теперь к dll в 250 кб прилагается пара десятков других размером под 18 метров, с этим можно что-то сделать или так и придется их таскать со своим файлом?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #246 : 15-02-2023, 15:09:25 »
Подскажите как быть со сторонними библиотеками? Для склеивания pdf использовал библиотеку itext7 добавив через nuget, работает нормально, но теперь к dll в 250 кб прилагается пара десятков других размером под 18 метров, с этим можно что-то сделать или так и придется их таскать со своим файлом?
Придется таскать. И более того - эта библиотека платная!

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #247 : 15-02-2023, 15:26:19 »
Для склеивания pdf использовал библиотеку itext7
Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 526
  • Карма: 116
Re: Оффтопик. Изучаем C#
« Ответ #248 : 15-02-2023, 16:18:52 »
И более того - эта библиотека платная!
Вроде iTextSharp5 можно использовать бесплатно

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Оффтопик. Изучаем C#
« Ответ #249 : 15-02-2023, 16:45:53 »
И более того - эта библиотека платная!
Вроде iTextSharp5 можно использовать бесплатно
5.5.13.3 - последняя версия, которую можно использовать бесплатно. Но в вопросе указана 7 версия

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #250 : 15-02-2023, 18:22:58 »
Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.
Блин, я сначала как раз itextsharp собрался ставить, но прочитал прям в ее описании что она устаревшая и вместо нее itext7 и поставил ее, сейчас поменял, правда пришлось полностью переписать модуль соединения, на этот раз написал сам, старый просто в виде функции скачанной из инета был. Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся). Спасибо за совет.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13827
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #251 : 15-02-2023, 18:45:12 »
Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся)
Точно. Про вторую dll я забыл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #252 : 15-02-2023, 21:03:22 »
И более того - эта библиотека платная!
А какой вообще признак платной библиотеки? Это только в пользовательском соглашении прописывается?
Почитал про itext7 там точно такая же лицензия как и в itextsharp - Open Source AGPLv3 license как я понял не для коммерческого использования можно пользоваться свободно? И какие-то ограничения вроде того что должен предоставить свой код написанный с помощью этой библиотеки и где-то прописывать ее упоминание.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #253 : 17-02-2023, 09:50:59 »
Еще один вопрос, для ограничения ввода в текстбоксы только цифр сделал public static класс в котором разместил несколько public static функций ограничивающих ввод определенных символов. В Designer создаю события типа KeyPress в котором ссылаюсь на эти функции, все прекрасно работает, но периодически эти события просто исчезают, в Visual Studio есть какие-то ограничения на события, ссылающиеся на другие классы?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #254 : 17-02-2023, 11:04:12 »
Если используется WPF, я бы подумал на предмет валидации данных в окне.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #255 : 17-02-2023, 11:07:47 »
Если используется WPF, я бы подумал на предмет валидации данных в окне.
Обычный winform

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #256 : 17-02-2023, 11:09:40 »
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #257 : 17-02-2023, 12:05:46 »
https://habr.com/ru/post/209820/ ?
ну немного не то, у меня в textbox просто не вводятся или не вставляются символы, которые не являются числами, вопрос в том, что функция лежащая в самом классе формы работает нормально
Код - C# [Выбрать]
  1. this.textBox1_ur3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox_KeyPress_minus);
если же использовать такой код
Код - C# [Выбрать]
  1. this.textBox1_ur3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(form_function.textBox_KeyPress_minus);
то код нормально компилируется, работает, но в какой-то момент эта строка из designer просто исчезает.
так то просто форм много и было бы проще сделать в одном месте эти функции и с каждой формы обращаться к этому классу чем на каждую новую форму их копировать, может я просто из-за отсутствия профильного образования не знаю каких-то нюансов в этом вопросе и так делать нельзя?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #258 : 17-02-2023, 12:23:27 »
Может, нечто типа:
Код - C# [Выбрать]
  1.         private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
  2.         {
  3.             OnlyNumbers. IsValueDigital(sender, e);
  4.         }
  5.  
  6. // Вообще в другом каталоге, отдельный класс
  7.     public static class OnlyNumbers
  8.     {
  9.         public static void IsValueDigital(object sender, KeyPressEventArgs e)
  10.         {
  11.             if (!Char.IsDigit(e.KeyChar))
  12.             {
  13.                 e.Handled = true;
  14.             }
  15.         }
  16.     }
По-быстрому проверил - вроде работает.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 526
  • Карма: 116
Re: Оффтопик. Изучаем C#
« Ответ #259 : 17-02-2023, 12:39:10 »
itext7
Если я не ошибаюсь itext5 был бесплатным, а потом сделали itext7 и он уже под другой лицензией

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 526
  • Карма: 116
Re: Оффтопик. Изучаем C#
« Ответ #260 : 17-02-2023, 12:54:12 »
Может, нечто типа:
Char.IsDigit(e.KeyChar

Давно что-то делал подобное, этот вариант не очень.
Нужно будет добавить +-. и сложно будет предотвратить случайный порядок нажатия символов  --+7...5.03+45.

Проще будет сделать так, после ввода симола пробовать парсить строку в нужное число
if (int.TryParse(text, out int res))...
if (double.TryParse(text, out int res))...

Или проверку через регулярные выражения реализовать, сложнее разобраться новичкам
if (Regex.IsMatch(text, @"^[+-]?\d*\.?\d*$"))...


Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #261 : 17-02-2023, 13:42:19 »
Да собственно этот "валидатор" может содержать в себе что угодно. Проблема в том, что он "отваливается".
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #262 : 17-02-2023, 16:06:08 »
Проще будет сделать так, после ввода симола пробовать парсить строку в нужное число
if (int.TryParse(text, out int res))...
if (double.TryParse(text, out int res))...
Вот это очень плохой вариант, у меня помню парс игнорил запятую если она разделитель и выдавал число как целое состоящее из дробной и целой части, так что тут все не так просто, я просто запретил ввод всех символов кроме чисел, точки, запятой и минуса, причем запятая автоматом на точку заменяется, ну и там проверки что минус может быть только первым и только один, точка только одна и не может быть первым символом и тд. ну и запрет на копирование в ячейку, дает почти 100% шанс что ничего лишнего там не окажется, а парсится если это значение вообще если понадобится.
« Последнее редактирование: 17-02-2023, 17:01:56 от alz »

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 526
  • Карма: 116
Re: Оффтопик. Изучаем C#
« Ответ #263 : 19-02-2023, 14:59:20 »
Вот это очень плохой вариант, у меня помню парс игнорил запятую если она разделитель
И поэтому это плохой вариант и нужно городить кучу кода для проверки?
а text.replace(',', '.'); впереди не судьба добавить?

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #264 : 19-02-2023, 19:05:59 »
И поэтому это плохой вариант и нужно городить кучу кода для проверки?
а text.replace(',', '.'); впереди не судьба добавить?

Ну так то пофиг какой вариант использовать

Код - C# [Выбрать]
  1. public static void textBox_KeyPress_minus(object sender, KeyPressEventArgs e)
  2.         {
  3.             TextBox tTBox = sender as TextBox;              
  4.             if (double.TryParse(tTBox.Text + e.KeyChar, System.Globalization.NumberStyles.Any,
  5.                                     System.Globalization.CultureInfo.InvariantCulture, out _)) e.Handled = true;
  6.         }
или
Код - C# [Выбрать]
  1. public static void textBox_KeyPress_minus(object sender, KeyPressEventArgs e)
  2.         {
  3.            TextBox tTBox = sender as TextBox;
  4.             if (e.KeyChar == ',') e.KeyChar = '.';        
  5.             if (!Char.IsDigit(e.KeyChar) && (e.KeyChar != 8) && ((e.KeyChar != '-') || (tTBox.Text.IndexOf("-") == 0) || tTBox.SelectionStart != 0) &&
  6.                 ((e.KeyChar != '.') || (tTBox.Text.IndexOf(".") != -1) || (tTBox.SelectionStart == 0) || (!Char.IsDigit(tTBox.Text.Substring(tTBox.SelectionStart - 1, 1), 0)) || (tTBox.Text.IndexOf(".") != -1)))
  7.                 e.Handled = true;
  8.         }

Вопрос почему обработчик отваливается через некоторое время, когда я даже не скажу, просто замечаю периодически что его уже нет. Если вызывает функцию другого класса.
« Последнее редактирование: 19-02-2023, 19:36:46 от alz »

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #265 : 19-02-2023, 20:48:08 »
Если вызывает функцию другого класса.
А этот другой класс статический?
Извините, вам запрещён просмотр содержимого спойлеров.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #266 : 20-02-2023, 07:06:48 »
А этот другой класс статический?
Из которого вызывается обычный, вызывается статический.

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #267 : 20-02-2023, 08:52:47 »
Не понял, если честно. У тебя есть событие, которое обращается к методу статического класса (валидатору, так обзову). Валидатор в свою очередь обращается к методу второго класса. И вот этот второй класс - статический? Ну так, на всякий случай.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #268 : 20-02-2023, 08:58:27 »
Не понял, если честно. У тебя есть событие, которое обращается к методу статического класса (валидатору, так обзову). Валидатор в свою очередь обращается к методу второго класса. И вот этот второй класс - статический? Ну так, на всякий случай.
Событие напрямую обращается к валидатору в статическом классе.

Оффлайн alz

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 11
Re: Оффтопик. Изучаем C#
« Ответ #269 : 16-03-2023, 17:19:48 »
В общем разобрался в этом вопросе все дело в файле designer, если в нем есть хоть какие-то ссылки на другие классы, то при изменении элементов формы при перестроении файла все это удаляется, соответственно любые валидаторы находящиеся в других класса там использовать не получится, точнее получится, но до первого изменения чего-либо на форме, так что раньше я все обработчики закидывал в него, если они ссылались на функции внутри формы проблем не было.
Решением оказалось помещение обработчиков событий в основной код формы, отсюда ничего не удаляется:

Код - C# [Выбрать]
  1. using System;
  2. using System.Windows.Forms;
  3.  
  4. namespace Function
  5. {
  6.     public partial class Form1 : Form
  7.     {        
  8.         public Form1()
  9.         {
  10.             InitializeComponent();
  11.             Function function = new Function();
  12.             textBox1.KeyPress += new KeyPressEventHandler(function.TbKeyDoubleMinus);
  13.             textBox1.LostFocus += new EventHandler(function.TbLostFocus);
  14.         }
  15.     }
  16. }

Ну и может быть кому-то пригодится, класс с обработчиками, позволяет полностью контролировать ввод данных от пользователя, клавиша минус инвертирует число в текстбоксе, бекспейсом можно удалять выделенные фрагменты так же как и делитом.

Код - C# [Выбрать]
  1. using System;
  2. using System.Linq;
  3. using System.Windows.Forms;
  4.  
  5. namespace Function
  6. {
  7.     /// <summary>
  8.     /// События для управлением пользовательским вводом в текстбоксы
  9.     /// </summary>
  10.     internal class Function
  11.     {
  12.         /// <summary>
  13.         /// добавляет 0 к содержимому текстбокса если в нем нет чисел
  14.         /// используется при событии потери фокуса что бы в текстбоксе точно было число которое можно парсить      
  15.         /// </summary>
  16.         /// <param name="sender"></param>
  17.         /// <param name="e"></param>
  18.         public void TbLostFocus(object sender, EventArgs e)
  19.         {
  20.             TextBox tTB = sender as TextBox;
  21.             foreach (Char c in tTB.Text) if (Char.IsDigit(c)) return;          
  22.             tTB.Text += "0";
  23.         }
  24.         /// <summary>
  25.         /// это событие позволяет возможность вводить десятичные положительные и отрицательные числа
  26.         /// </summary>
  27.         /// <param name="sender"></param>
  28.         /// <param name="e"></param>
  29.         public void TbKeyDoubleMinus(object sender, KeyPressEventArgs e)
  30.         {
  31.             TextBox tTB = sender as TextBox;          
  32.             if (e.KeyChar == ',') e.KeyChar = '.';          
  33.             if (e.KeyChar == '-')
  34.             {
  35.                 int pos = tTB.SelectionStart;
  36.                 if (tTB.Text.Contains('-'))
  37.                 {
  38.                     tTB.Text = tTB.Text.Substring(1);
  39.                     tTB.SelectionStart = pos - 1;
  40.                 }
  41.                 else
  42.                 {
  43.                     tTB.Text = '-' + tTB.Text;
  44.                     tTB.SelectionStart = pos + 1;
  45.                 }
  46.                 e.Handled = true;
  47.                 return;
  48.             }
  49.             if (e.KeyChar == '.')
  50.             {
  51.                 if (tTB.Text.Contains('.') | (tTB.SelectionStart == 0 & tTB.Text.Contains('-'))) e.Handled = true;              
  52.                 return;
  53.             }
  54.             if (e.KeyChar == 8 )
  55.             {
  56.                 if (tTB.SelectionLength > 0)
  57.                 {
  58.                     int pos = tTB.SelectionStart;
  59.                     tTB.Text = tTB.Text.Substring(0, tTB.SelectionStart) + tTB.Text.Substring(tTB.SelectionStart + tTB.SelectionLength);
  60.                     tTB.SelectionStart = pos;
  61.                     e.Handled = true;
  62.                 }                
  63.                 return;
  64.             }
  65.             if (Char.IsDigit(e.KeyChar))
  66.             {
  67.                 if (tTB.Text.Contains('-') & tTB.SelectionStart == 0) e.Handled = true;
  68.                 return;
  69.             }
  70.             e.Handled = true;
  71.         }
  72.         /// <summary>
  73.         /// это событие позволяет вводить десятичные положительные числа
  74.         /// </summary>
  75.         /// <param name="sender"></param>
  76.         /// <param name="e"></param>
  77.         public void TbKeyDouble(object sender, KeyPressEventArgs e)
  78.         {
  79.             TextBox tTB = sender as TextBox;
  80.             if (e.KeyChar == ',') e.KeyChar = '.';
  81.             if (e.KeyChar == '.')
  82.             {
  83.                 if (tTB.Text.Contains('.') | (tTB.SelectionStart == 0 & tTB.Text.Contains('-'))) e.Handled = true;
  84.                 return;
  85.             }
  86.             if (e.KeyChar == 8)
  87.             {
  88.                 if (tTB.SelectionLength > 0)
  89.                 {
  90.                     int pos = tTB.SelectionStart;
  91.                     tTB.Text = tTB.Text.Substring(0, tTB.SelectionStart) + tTB.Text.Substring(tTB.SelectionStart + tTB.SelectionLength);
  92.                     tTB.SelectionStart = pos;
  93.                     e.Handled = true;
  94.                 }
  95.                 return;
  96.             }
  97.             if (Char.IsDigit(e.KeyChar))
  98.             {
  99.                 if (tTB.Text.Contains('-') & tTB.SelectionStart == 0) e.Handled = true;
  100.                 return;
  101.             }
  102.             e.Handled = true;
  103.         }
  104.         /// <summary>
  105.         /// это событие позволяет вводить целые положительные и отрицательные числа
  106.         /// </summary>
  107.         /// <param name="sender"></param>
  108.         /// <param name="e"></param>
  109.         public void TbKeyIntegerMinus(object sender, KeyPressEventArgs e)
  110.         {
  111.             TextBox tTB = sender as TextBox;            
  112.             if (e.KeyChar == '-')
  113.             {
  114.                 int pos = tTB.SelectionStart;
  115.                 if (tTB.Text.Contains('-'))
  116.                 {
  117.                     tTB.Text = tTB.Text.Substring(1);
  118.                     tTB.SelectionStart = pos - 1;
  119.                 }
  120.                 else
  121.                 {
  122.                     tTB.Text = '-' + tTB.Text;
  123.                     tTB.SelectionStart = pos + 1;
  124.                 }
  125.                 e.Handled = true;
  126.                 return;
  127.             }
  128.             if (e.KeyChar == 8)
  129.             {
  130.                 if (tTB.SelectionLength > 0)
  131.                 {
  132.                     int pos = tTB.SelectionStart;
  133.                     tTB.Text = tTB.Text.Substring(0, tTB.SelectionStart) + tTB.Text.Substring(tTB.SelectionStart + tTB.SelectionLength);
  134.                     tTB.SelectionStart = pos;
  135.                     e.Handled = true;
  136.                 }
  137.                 return;
  138.             }
  139.             if (Char.IsDigit(e.KeyChar))
  140.             {
  141.                 if (tTB.Text.Contains('-') & tTB.SelectionStart == 0) e.Handled = true;
  142.                 return;
  143.             }
  144.             e.Handled = true;
  145.         }
  146.         /// <summary>
  147.         /// это событие позволяет вводить целые положительные числа
  148.         /// </summary>
  149.         /// <param name="sender"></param>
  150.         /// <param name="e"></param>
  151.         public void TbKeyInteger(object sender, KeyPressEventArgs e)
  152.         {
  153.             TextBox tTB = sender as TextBox;
  154.             if (e.KeyChar == 8)
  155.             {
  156.                 if (tTB.SelectionLength > 0)
  157.                 {
  158.                     int pos = tTB.SelectionStart;
  159.                     tTB.Text = tTB.Text.Substring(0, tTB.SelectionStart) + tTB.Text.Substring(tTB.SelectionStart + tTB.SelectionLength);
  160.                     tTB.SelectionStart = pos;
  161.                     e.Handled = true;
  162.                 }
  163.                 return;
  164.             }
  165.             if (Char.IsDigit(e.KeyChar))
  166.             {
  167.                 if (tTB.Text.Contains('-') & tTB.SelectionStart == 0) e.Handled = true;
  168.                 return;
  169.             }
  170.             e.Handled = true;
  171.         }
  172.     }
  173. }
  174.  

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #270 : 17-02-2024, 13:47:06 »
Изучаю .Net8. Это сильно кастрированая система, в ней часть старых функций приходится докачивать как nuget пакеты. Вопрос в том, как заставить Студию из этих пакетов вытащить только нужные dll и скопировать в папку плагина? И как заставить программу на компьтерах пользователей находить эти dll в папке плагина (просто положить рядом с основной dll не помогает)? Или может есть еще варианты, как лучше передавать пользователям эти nuget?

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1093
  • Карма: 172
Re: Оффтопик. Изучаем C#
« Ответ #271 : 17-02-2024, 15:49:03 »
как заставить Студию из этих пакетов вытащить только нужные dll и скопировать в папку плагина?
Насколько я знаю никак
как заставить программу на компьтерах пользователей находить эти dll в папке плагина (просто положить рядом с основной dll не помогает)?
AssemblyResolve или ее альтернативы, которые на форуме болтались - это если говорить про ACAD-дополнения.
Или может есть еще варианты, как лучше передавать пользователям эти nuget?
NuGet имеет смысл, как мне кажется, только для разработчика. Пользователям инсталлер подавай ;)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 798
  • Карма: 165
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #272 : 17-02-2024, 17:08:36 »
Спасибо. Я наивно надеялся, что MS придумали эти странные пакеты, чтоб они сами ставились у пользователей по первому обращению. Я даже заметил, что Студия создает странный скрипт (json) с перечислением пакетов в папке рядом с dll. Но чуда не свершилось и скрипт этот не запускается  :(
Значит буду подбирать методом тыка какие dll нужны ( уж больно их там много в каждом пакете)... Вот жеж придумали MS геморрой...
« Последнее редактирование: 16-03-2024, 13:27:46 от avc »