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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Изучаем C#
« Ответ #8 : 28-08-2015, 20:33:02 »
Windcastle == Пашин Евгений
Ясно... :) Он же Гоша, он же Сева... Чем один логин не устроил? Вопрос риторический.

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

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

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • 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
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • 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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #26 : 28-08-2015, 23:14:49 »
Я уверен, что если человек специалист в своем деле, то он сможет объяснить легко и просто даже ребенку то, что знает он, если конечно он действительно понимает и знает свое дело.
А вот тут ты совершенно не прав. Далеко не каждый очень классный программист может научить другого человека программированию. И далеко не каждый классный учитель программирования в состоянии создать программный шедевр. Талант учителя и талант программиста - это совершенно разные и зачастую непересекающиеся вещи. И это касается не только программирования. Есть множество случаев, когда спортсмен не достигший вершин в спорте становился тренером будущих олимпийских чемпионов. А эти олимпийские чемпионы, став в дальнейшем тренерами, не смогли вырастить себе достойную смену.
Как бы эти слова программируют меня (вброс в подсознание), что я уже какой-то не-до-программист.
Ну как бы защищайся. Как минимум докажи (на деле), что он не прав! :) Одних для достижения максимального результата нужно всегда хвалить, других постоянно ругать, третьи любят сочетания кнута с пряником...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • 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
  • ****
  • Сообщений: 465
  • Карма: 61
Re: Изучаем C#
« Ответ #36 : 29-08-2015, 18:19:31 »
А я пишу, что в CIL они существуют и это не сахар см. в рефлексе, либо попробуй создать свойство созданием метода.

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • 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
  • ****
  • Сообщений: 465
  • Карма: 61
Re: Изучаем C#
« Ответ #38 : 29-08-2015, 20:17:02 »
Ну так и с какого перепуга стандартная процедура CLI является синтаксическим сахаром языка С#. Я кстати в данной цитате нигде не увидел, что это он (сахар).

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • 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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Изучаем C#
« Ответ #42 : 29-08-2015, 22:51:00 »
з.з.ы - То А. Ривилис - флудить Вы сами разрешили.
А я от своих слов и не отказываюсь. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Согласен :)

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

  • ADN PRO
  • *
  • Сообщений: 662
  • Карма: 11
  • 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
  • ****
  • Сообщений: 465
  • Карма: 61
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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #75 : 02-09-2015, 20:59:51 »
Вот такие они web-autolisp программисты.
:D :D :D
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

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

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

  • ADN Club
  • ****
  • Сообщений: 465
  • Карма: 61
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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • **
  • Сообщений: 92
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #82 : 30-10-2015, 17:56:36 »
А что-то не могу осилить C#. Чего-то не хватает: времени или мозгов :)
VS2013, VBA 7.1, VB.NET, C#, ACAD2014

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

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

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

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

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

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

Оффлайн Agens

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

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

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

Оффлайн avc

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

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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • ****
  • Сообщений: 380
  • Карма: 68
    • Мои плагины к Автокаду
Re: Оффтопик. Изучаем C#
« Ответ #93 : 15-02-2016, 12:32:06 »
Я не пробовал, но теоретически должно помочь.
Попробовал. Помогает! На мой взгляд это оптимальное решение. Универсальное и не требуется поиск и загрузка огромных ненужных библиотек.
Спасибо!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

  • ADN
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
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
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
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" };
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

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

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

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

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


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

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

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

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

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
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. }
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оффлайн trir

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

Оффлайн trir

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

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

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

Оффлайн trir

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • Сообщений: 36
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #148 : 24-12-2017, 16:56:36 »
Если ключ превращать в строку, то проще, наверно, использовать Dictionary<TKey, TValue> . На этом я, наверно , и остановлюсь.

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

  • ADN
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
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
  • Сообщений: 36
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #150 : 27-12-2017, 15:40:47 »
Здравствуйте!
Подскажите, пожалуйста, если использовать сначала Dictionary.ContainsKey(key), а потом Dictionary.Add(key,value) не происходит ли двойной поиск  ключа в словаре? или Add не проверяет?

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

  • ADN
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
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
  • Сообщений: 36
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #152 : 27-12-2017, 15:47:52 »
Мне не надо перезаписывать, а наоборот, если есть , то вернуть , что есть, если нет - то записать

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Оффтопик. Изучаем C#
« Ответ #155 : 27-12-2017, 15:58:36 »
не происходит ли двойной поиск  ключа в словаре?
Так как коллекция упорядоченная, то поиск происходит очень быстро (не последовательным перебором). Так что об этом можно не беспокоиться.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • Сообщений: 36
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #161 : 27-12-2017, 16:25:15 »
Да, вижу, вот думаю, что надо изменить, чтобы два раза не выполнялась проверка ключа, а тип возвращаемого значения тоже обдумывается. Вроде не особо хорошо писать у Add какой то тип возвращаемого параметра, может поменять название метода на что то типа GetObject, но вроде возвращать ссылку на то, что посылаю как параметр тоже не особо.

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

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

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

  • Administrator
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • Сообщений: 36
  • Карма: 0
Re: Оффтопик. Изучаем C#
« Ответ #164 : 28-12-2017, 00:35:52 »
Александр Ривилис,
Спасибо, немного видоизменила, это то, что нужно

Оффлайн Atomohod

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 0
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
  • *
  • Сообщений: 1664
  • Карма: 398
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Re: Оффтопик. Изучаем C#
« Ответ #166 : 26-05-2018, 10:56:52 »
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else.
А как проявляется это самое "не срабатывает"?

Оффлайн Atomohod

  • ADN OPEN
  • ***
  • Сообщений: 101
  • Карма: 0
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
  • *****
  • Сообщений: 8596
  • Карма: 1049
  • Рыцарь 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
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
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>
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

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

  • ADN Club
  • ****
  • Сообщений: 274
  • Карма: 40
  • 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
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
Re: Оффтопик. Изучаем C#
« Ответ #173 : 17-06-2018, 13:46:09 »
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

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

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

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

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

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

Оффлайн simson43

  • ADN OPEN
  • ***
  • Сообщений: 229
  • Карма: 1
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
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

Оффлайн simson43

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

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

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

Оффлайн simson43

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

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

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

  • ADN Club
  • *****
  • Сообщений: 1222
  • Карма: 248
  • Отец modplus.org
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. }

Пишут, что работает. Если у вас не работает, то, видимо, проблема где-то в другом месте
ModPlus
Блог
Отвечаю в надежде получить плюсики в карму =))

Оффлайн simson43

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

Оффлайн simson43

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

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


Оффлайн simson43

  • ADN OPEN
  • ***
  • Сообщений: 229
  • Карма: 1
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.         }