Думаю, что это было бы для тебя проще.
На простое решение рассчитывать не приходится! Да уж!В выложенном мною .net-решении сложного ничего нет. Исходный код подробно комментирован. Если есть конкретные вопросы по существу темы - можешь не стесняться спрашивать.
Если есть конкретные вопросы по существу - задавай.Подожди. Вопросы будут скорее всего после (хотябы) поверхностного изучения C#. ;)
Вопросы будут скорее всего после (хотябы) поверхностного изучения C#.Я не отслеживаю темы от Windcastle. Если там всё плохо с азами языка программирования, то конечно - сначала нужно мат. часть языка учить.
В выложенном мною .net-решении сложного ничего нет. Исходный код подробно комментирован. Если есть конкретные вопросы по существу темы - можешь не стесняться спрашивать.
Windcastle == Пашин ЕвгенийЯсно... :) Он же Гоша, он же Сева... Чем один логин не устроил? Вопрос риторический.
А у Вас терпение железное?Нет. Глупые вопросы меня взрывают. Не ленись читать и я буду целее. :)
Это будет оптимальным решением.Осталось дело за малым: прочитать этот кирпич... :)
Нет. Глупые вопросы меня взрывают. Не ленись читать и я буду целее.
читать люблю! С пониманием плохо!Ну так для этого форумы и существуют. Если задавая вопрос ты обозначаешь материал, предварительно прочитанный и результаты поиска в Инете по непонятному вопросу, то реакция на вопросы будет иная, т.к. ты тем самым показываешь, что и сам прикладываешь усилия к тому, чтобы найти ответ на него.
Но с C# я тут буду не в тему!Вот (http://stackoverflow.com/questions/tagged/c%23?sort=votes&pageSize=15)хороший дополнительный ресурс, где можно задавать вопросы по кодингу и около того.
Можно будет в личные сообщения вопросы задавать?Нет, в личке этого лучше не делать, т.к. в случае открытого общения полезный ответ могут дать и другие форумчане. Можешь в личку присылать ссылки на свои вопросы, опубликованные на обозначенном мною выше ресурсе. Правда там отвечают быстро, возможно, что ответят и до того, как ссылку получу я. :)
не хотелось бы остаться с "китайской грамотой" один-на-одинC# очень простой язык. Шильдт (да и не только он) излагает материал последовательно и понятно. Для освоения с нуля вполне подходит (как справочник). Я учился по Троелсену и использовал Шильдта как дополнительное чтиво + справочник.
Если C# для тебя и после чтения книг является "китайской грамотой", то вполне возможно, что программирование - это не твоё.
Меня лично Ваши слова "программирование - это не твоё" - задели, вернее мне вдруг уже захотелось закрыть книгу и не читать ееНу вот. А я только-только сказал Андрей Бушман, что он в этот раз удивительно деликатен. Обрати внимание, что это было не утверждение, и даже не предположение, а теоретическое рассуждение о такой возможности.
Обрати внимание, что это было не утверждение, и даже не предположение, а теоретическое рассуждение о такой возможности.
Если C# для тебя и после чтения книг является "китайской грамотой", то вполне возможно, что программирование - это не твоё.
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
Я уверен, что если человек специалист в своем деле, то он сможет объяснить легко и просто даже ребенку то, что знает он, если конечно он действительно понимает и знает свое дело.А вот тут ты совершенно не прав. Далеко не каждый очень классный программист может научить другого человека программированию. И далеко не каждый классный учитель программирования в состоянии создать программный шедевр. Талант учителя и талант программиста - это совершенно разные и зачастую непересекающиеся вещи. И это касается не только программирования. Есть множество случаев, когда спортсмен не достигший вершин в спорте становился тренером будущих олимпийских чемпионов. А эти олимпийские чемпионы, став в дальнейшем тренерами, не смогли вырастить себе достойную смену.
Как бы эти слова программируют меня (вброс в подсознание), что я уже какой-то не-до-программист.Ну как бы защищайся. Как минимум докажи (на деле), что он не прав! :) Одних для достижения максимального результата нужно всегда хвалить, других постоянно ругать, третьи любят сочетания кнута с пряником...
Я не обижаюсь, я просто сделал вывод. Коим и поделился. Эти слова не похожи на Ваши, когда Вы мотивировали изучать C#, просто хотя бы потому что это язык для профессионалов... как будто это уже признак профессионализма. Вот это мотив, не правда ли?Раз уж создали тему
"физиологически" - тошнит.
Поля - это не понятно!Windcastle - Вы молодец. Молодец в том, что задались этим вопросом (для меня это показатель, что Вы пытаетесь вникнуть в суть, а не прочитать). Да действительно, с точки зрения абстракции алгоритма разницы между ними нет - и это очень хорошо, что Вы мыслите именно абстрактными категориями - а не классами, полями, байтами и пр.
Жду критики!У меня возникло такое ощущение, что ты, еще не дочитав введение в детектив а уже спрашиваешь у того, кто прочитал, кто убийца. При этом вполне возможно, что убийцы нет, а есть вор... :)
4. То есть я пишу приложение *.exe, к нему могу подключать *.dll файлы (извне) или добавить в проект еще один проект библиотеки *.dll, которая будет зависеть от данного приложения *.exe. Но при этом созданная библиотека внутри может быть подключена другими приложениями. Так?Не *.dll будет зависеть от *.exe, а наоборот. И этот *.dll, если он правильно спроектирован, может использоваться и с другими *.dll и/или *.exe
Когда я "вырасту", то я вынуждено выступлю антагонистом Андрею."Хороший" полицейский? Ну всё, придётся мне на двг.ру уходить... :)
Жду критики!Так обижаться же будешь опять, снова выискивая в замечаниях какой-то своеобразный смысл, который мною в них не вкладывался... Я, пожалуй, не буду комментировать твою "оптимистичную" реакцию, размазанную на целую страницу...
Для чего используется поле?поле должно хранить значение свойства (не важно, какова область видимости этого свойства). За поле, объявленное с модификатором доступа public нужно бить линейкой по рукам.
Манифест - это как общий перечень деталей автомобиля с описанием того, какая деталь от какой зависит. Правильно понимаю?Всё тот же Рихтер, всё в той же книге и этот вопрос разжёвывает.
Что-то типа, когда молодой человек рассматривает девушку и определяет ее параметры, свойства и ее методы (ее возможности). Приблизительно так?Какие-то мутные у тебя аналогии...
...
То есть это как если были бы хоккейное и футбольное поле, но вратари в обоих случаях были бы разными. На футбольном поле это легко одетый человек, а на хоккейном поле тепло и защищенный от ударов шайбы. И потому у каждого из этих вратарей будут соответственно разные: свойства, методы, события и т.д. Верно понимаю? Значит использовать вратаря из хоккейного поля ни в коем случае использовать в футбольном поле нельзя, только если его имя и фамилию, к примеру. Так?
Подытожу, грубо говоря рефлексия - не что иное как процесс определения параметров объекта в процессе выполнения какой либо процедуры, а параметры заранее не известны.А что, этот (https://msdn.microsoft.com/ru-ru/library/system.reflection%28v=vs.110%29.aspx) текст был чем-то не понятным?
никаких свойств в CIL на самом деле не существует. На самом деле это ни что иное как "синтаксический сахар" в языке C#.Опс - граф - тут сразу несколько ошибочных утверждений, во первых не в языке C#, а во всем .Net. Во вторых это не "сахар" а конкретный механизм. Да создавая свойство XXX автоматически создадутся методы get_XXX и если и на запись, то и set_XXX, через которые и будет обращение, но не наоборот - создав метод get_Abc() - свойство Abc не появится - и в "рефлекшине" соотв. записи не будет. Такая картина впрочем не только в .Net (в смысле автоматическое создание методов для доступа - чтоб не городить отдельный механизм).
тут сразу несколько ошибочных утверждений, во первых не в языке C#, а во всем .Net. Во вторых это не "сахар" а конкретный механизм.Я писал:
никаких свойств в CIL на самом деле не существует.Во первых, CIL - это не C#. Если нет в CIL, то нет и в языках более высокого уровня, т.к. их код компилируется именно в CIL.
но не наоборот - создав метод get_Abc() - свойство Abc не появится - и в "рефлекшине" соотв. записи не будет.Я и не писал этого. когда я писал о get и set, то имел соответствующие блоки кода в определении свойства.
Такая картина впрочем не только в .Net (в смысле автоматическое создание методов для доступа - чтоб не городить отдельный механизм).Я в курсе. Это и называется "синтаксическим сахаром". Тот же Рихтер его так и называет.
А я пишу, что в CIL они существуют и это не сахар см. в рефлексе, либо попробуй создать свойство созданием метода.
Поддержка свойств встроена в C#. Обнаружив код, пытающийся получить или задать свойство, компилятор генерирует вызов соответствующего метода. Если используемый язык не поддерживает свойства напрямую, к ним все равно можно обратиться посредством вызова нужного метода доступа. Эффект тот же, только исходный текст выглядит менее элегантно.
Помимо методов доступа, для каждого из свойств, определенных в исходном тексте, компиляторы генерируют в метаданных управляемого модуля запись с определением свойства. Такая запись содержит несколько флагов и тип свойства, а также ссылки на методы доступа get и set. Эта информация существует лишь затем, чтобы связать абстрактное понятие «свойства» с его методами доступа. Компиляторы и другие инструменты могут использовать эти метаданные через класс System.Reflection.PropertyInfo. И все же CLR не использует эти метаданные, требуя при выполнении только методы доступа.
Ну так и с какого перепуга стандартная процедура CLI является синтаксическим сахаром языка С#. Я кстати в данной цитате нигде не увидел, что это он (сахар).
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.Поправляюсь - синтаксическим сахаром он называл автоматические свойства.
почему меня раздражает c# - практически все перечисленное в ней - в чистом виде "функциональщина" - которую натягивают на не предназначенный для этого язык из другой парадигмыя ничего подобного не вижу.
(ну он вроде как потомок с и с++) - ИХМО получается как седло на корове.Смотря что имеется в виду под "потомком". Да, синтаксис весьма похож, но это не то же самое, что С или C++. Код С89 можно компилировать в Visual C++, поэтому С++ - полноценный потомок С (у Стровструпа, кстати, есть хорошая книга по истории С++). Однако ни код C, ни код С++ откомпилировать в C# не удастся, поэтому родства подобного C\C++ у C# с этими языками всё же нет.
з.з.ы - То А. Ривилис - флудить Вы сами разрешили.А я от своих слов и не отказываюсь. :)
В то же время C# - объектно-ориентированный язык. Функциональное программирование в нём невозможно.Это с какого перепугу - а LINQ и анонимные функции - это что - да в чистейшем виде функциональщина - неудобно и криво сделано - да - о чем я и пишу (что понятно ибо это как скрестить ужа с ежом) - но она там гораздо более возможней, чем в тех же c и c++ - где даже сборка мусора отсутствует (ну в с++ там по моему какая-то затычка в этом роде была).
кстати объектно-ориентированный язык - это совсем не значит, что он императивный - он в равной степени может быть и функциональным - просто объекты у него по "умолчанию" не изменяются, а пересоздаютсяЯ знаю. Тогда это получается чисто-фунциональный язык.
вся структура "родителей" (с,с++) - ну скажем так, не очень заточена под функциональное программированиеДа, в них отсутствуют ленивые вычисления и они не являются чисто-функциональными. Но у них есть свои плюсы и основной из них - скорость работы. У меня нет желания вести религиозные войны.
То, как в C# реализованы методы расширения и LINQ, работающий на основе этого механизма, меня вполне устраивает.Если-б не было c# - то наверное и vb многих устроил - это смотря с чем сравнивать.
Но у них есть свои плюсы и основной из них - скорость работы.Этот аргумент лет 20 как потерял актуальность - к c# он точно не имеет никакого отношения (я думаю во всех Ваших кодах последних 5 лет не найдется, к примеру, ни одной итерации по индексу - а ведь так быстрей - а везде будет минимум foreach или вообще linq вызов, более того если Вы такое увидите - то первый предложите "бить линейкой по рукам" и это и с моей точки зрения правильно и подобных примеров в Ваших-же кодах - немерено).
А что, этот текст был чем-то не понятным?
Скачал, попробую хотя бы по несколько страниц прочитывать-ИЗУЧАТЬ в день!А я бы посоветовал сначала один раз прочитать всю книгу, не сильно вдаваясь в детали. Причина очень простая - во введении и первых главах даются общие понятия без детализации. А их объяснение даётся в следующих главах. Количество вопросов сразу уменьшится.
FLD._color = True ' Что же это получается, что я и поле могу использовать и свойство? Почему поле отображается, если оно PRIVATEВнутри класса оно доступно, но недоступно вне его.
Внутри класса оно доступно, но недоступно вне его.
Напрашиваются вопросы:Ты уж определись: либо ты обиженный, предельно вежливый интеллигент, либо ты поясничаешь (тогда нехрен обижаться) не понятно чего добиваясь.
1. Андрей линейкой будет махать?
или
2. Андрей включит своего мудрого учителя и поможет понять в чем проблема?
Внутри класса оно доступно, но недоступно вне его.Я очень сомневаюсь, что в букваре об этом не пишут...
Кроме того, свойства позволяют инкапсулировать логику контроля доступа к полям и, в случае необходимости, править её, без необходимости править сторонний код, использующий эти свойства.В редакторе сообщений есть специальная кнопка с тегом цитаты. Используй её вместо того, чтобы делать шрифт "жирным", дабы всем было понятно, что это именно цитата.
Будьте человеком (вернее спуститесь с небес к людям) и объясните эту фразу как-нибудь проще... Можно на птичках, цветочках или т.п.?
Будьте человеком (вернее спуститесь с небес к людям)В контексте твоего вопроса это паясничанье идёт тебе не не пользу...
Тебе в любом случае ответит А.Н. Ривилис (ему придётся, не зависимо от того хочет он этого или нет ибо это его работа), так что от отсутствия моих сообщений ты ничего не потеряешь.Уточняю. Я отвечу в любом случае, если вопрос будет связан с AutoCAD API. Но отвечать на вопросы по основам языков программирования я не обязан. И в большинстве случаев буду указывать, что нужно пользоваться поиском.
В C# ты уже наверняка читал об интерфейсах.
В контексте твоего вопроса это паясничанье идёт тебе не не пользу...У меня правда сложилось впечатление, как будто Вы какой-то царь, а я какой-то холоп. Вот я и подумал, что надо Вам об этом как-то сказать и как можно мягче. У меня похоже не получилось.
Если ты в коде выполняешь взаимодействие на уровне интерфейсов (вместо использования конкретных классов напрямую), то ты можешь прозрачно для программы подменять один класс, реализующий этот интерфейс, другим классом.
Читал, но не понял! Интерфейсами Вы называете то, что просто является кодом?Я вижу, что книг ты не читаешь, зато продолжаешь нести какую-то чушь (царь\холоп) и размазывать сопли. Всё, я умываю руки, далее без меня.
...
Ну и что это значит?
Я читал и перечитывал отдельные главы по нескольку раз и абсолютно ничего не мог понять.
Мало кто готов тратить свое время (бесплатно) на подробное и обстоятельное разжевывание базовых понятий.
это НЕ vb.net, это vba.
и еще, это НЕ vb.net, это vba.VBA - это язык программирования. А то, что здесь - это COM/ActiveX.
На мой взгляд, COM - это пожалуй единственная зацепка, для того чтобы плавно перейти от чистого VBA/ActiveX к чистому NET (VB или C#).Резать к чёртовой матери, не дожидаясь перитонитов! (https://www.youtube.com/watch?v=j2br_GaH7B8)
Может Александр поправит, если я что-то не так написал?!
Резать к чёртовой матери, не дожидаясь перитонитов!
Иначе к AutoCAD .NET API ты не перейдёшь никогда.
Перейду, вот увидите. И еще Вам помогать отвечать на вопросы спрашивающих буду.Договорились! Этот боевой настрой мне нравится. :)
' Получение редактора текущего документа (напрашивается вопрос: что под редактором текущего документа подразумевается)В действительности он один для всех документов. В ObjectARX это класс AcEditor, имеющий единственный экземпляр для всех документов. А вот в AutoCAD .NET API почему-то сделали получение объекта Editor через документ. Реально же это один и тот же объект для всех документов.
Реально же это один и тот же объект для всех документов.
Для всех чертежей во всех открытых приложениях AutoCAD? Или только для текущего приложения?Только для текущего приложения.
VBA - это язык программирования. А то, что здесь - это COM/ActiveX.Видимо я не достаточно правильно выразился. Я не про ЯП писал и не про методы работы с автокадом. Я имел ввиду то, как написан код, какие конструкции языка были использованы.
Идея вроде как не слишком плохаяИдея неплохая, но объём работы для меня неподъёмный. Лучше я буду тратить время на помощь программистам, чем заниматься терминологией. Да и проще и реальнее купить книгу. Например, Н.Н.Полещук. "Программирование для AutoCAD 2013-2015". ДМК Пресс, 2015 (http://adn-cis.org/forum/index.php?topic=1097.msg5350#msg5350)
У Николая Николаевича устоявшаяся за много лет терминология. Вот её я и рекомендую придерживаться.
К сожалению это характерно для программирования в VBA-стиле. Потому это VBA (в плохом смысле этого слова), а не COM/ActiveX написанный на VB.NET
Разговор со службой поддержки хостинга:Вот такие они web-autolisp программисты.
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 программисты.:D :D :D
Раз уж здесь разрешен флудТолько если перейдёшь с VB.NET на C# !!! :D
Только если перейдёшь с VB.NET на C# !!!Перейду, обязательно перейду. Но не все же сразу...) Пока и так слишком много вопросов, которые не связаны с выбором языка. С ними немного разгребусь и тогда ай-да изучать новый синтаксис.
А что-то не могу осилить C#. Чего-то не хватает: времени или мозгов :)Алексей Кулик прав - нужна именно четко поставленная задача. Когда будешь знать что хочешь увидеть в итоге, тогда начнешь потихоньку делать, искать нужную информацию и вникать в суть происходящего. Обычно находишь уже готовый пример и начинаешь в нем разбираться. Благо сейчас доступ к интернету есть почти везде
кто может дать ссылку на русскоязычный источник, дабы почитать про транзакцию и работу с базами. У меня в этом деле проблема :)Тынц (http://bushman-andrey.blogspot.ru/2013/01/database-autocad.html)
Дополнительный вопрос - под какую версию AutoCAD выполняется компиляция? При условии компиляции под 2009, например, подобные сообщения не редкость.Так как в вопросе фигурирует accoremgd.dll, то версия не ниже 2013 (в ней произошло разделение acmgd.dll на accoremgd.dll и acmgd.dll). Общие (независящие от разрядности AutoCAD) acmgd.dll и acdbmgd.dll появились в ObjectARX SDK 2011.
Получается там (в 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
Я не пробовал, но теоретически должно помочь.Попробовал. Помогает! На мой взгляд это оптимальное решение. Универсальное и не требуется поиск и загрузка огромных ненужных библиотек.
не требуется поиск и загрузка огромных ненужных библиотек.Огромные и ненужные библиотеки, это ObjectARX SDK? Ну-ну... Там большую часть занимает документация, которая совсем не бесполезная.
А предупреждение-то было во всех версиях с незапамятных времен, когда из автокада изъяли бейсик и пришлось переучиваться на дот-нет. Да, я долго терпелНу не знаю, что в этом такого критичного. Мешают - скрыл, да и все:
Здравствуйте!Так вы код покажите. Сигнатуру метода
Студия подчёркивает волнистой синей линией конструктор. При наведении мышкой подписывает "Method must have a return type". В чём может быть причина?
конструктор должен иметь возвращаемый тип?Метод должен иметь возвращаемы тип. Void - единственный вариант, который не возвращает ничего
1. Название класса и конструктора не совпадает. Попробуйте копипастом взять название класса. Может русский символ где-то затесался.Название скопировано.
2. Глюк студии. Попробуйте её заново открытьПомогло, Спасибо!
Помогло, Спасибо!Такое бывает достаточно часто. То, что подчеркивается какие-то методы/переменные в редакторе VS - это еще не показатель ошибки. Вот если вы скомпилировали и появилась ошибка в компиляции - это уже точно ошибка и её следует найти и устранить.
Здравствуйте, подскажите, пожалуйста, в С# есть аналог оператора with в VB?Нет
в С# есть аналог оператора with в VB?Насколько я знаю, прямого аналога нет. Разве что, есть похожий механизм - упрощённый инициализатор объекта или коллекции.
Доступен в C# версии 7Джозеф Албахари говорит, что доступен с версии C# 3.0
смотря для чего вамДля инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем
Я не пользовался структурами, но немного погуглив понимаю - то что вы хотите - нереализуемо. Используйте класссмотря для чего вамДля инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем
Для инициализации полей структуры, но через инициализатор , наверно, не подойдет, так как требуются проверки допустимости значений, введенных пользователем
но немного погуглив понимаюА я совершенно не понимаю: при чём тут проверка значений и инициализация полей структуры? Проверка значений может выполняться сразу после их ввода, ещё до каких-то инициализаций. Структура, также, может содержать метод проверки своих внутренних значений на корректность. Если Александр понял о чём Вы, то ему полагается орден Ванги 1-й степени :)
Структура, также, может содержать метод проверки своих внутренних значений на корректностьЯ сначала попробовал и у меня не получилось. Студия сразу заругалась)
Проверка значений может выполняться сразу после их ввода, ещё до каких-то инициализацийДа, точно, я торможу. Спасибо.
Для структуры можно задать только конструктор с параметрамиКонструктор использовать не хочу именно потому, что туда надо передавать кучу параметров.
Для структуры можно задать только конструктор с параметрамиДа, это так. Т.к. конструктор без параметров у неё всегда есть "по умолчанию".
и при этом имена параметров должны полностью повторять имена полей в структуреА вот это не верно. В конструкторе должны задаваться значения всех полей, но это никак не связано с составом и именами параметров.
А вот это не верно.Да, наврал. Но у меня студия ругалась, когда я пробовал. И теперь не знаю на что... Ну в общем - хрен с ней) С вопросом разобрались
Здравствуйте!Что-то страшное вы рассказываете)
Пытаюсь перейти на C# после VBA, не понятен такой момент: в VBA можно было писать много модулей, взаимодействующих между собой, в результате компиляции получался один dvb файл. А на C# каждый файл .cs компилируется в свою сборку? Если я хочу разнести программу на логические части, как правильно сделать: делать многофайловую сборку из нескольких .cs файлов или есть какой то ещё вариант?
проект, в свойствах которого ставите "библиотека классов"А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?
Нет. Проект всегда компилируется во что-то однопроект, в свойствах которого ставите "библиотека классов"А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?
А на C# каждый файл .cs компилируется в свою сборку?Расскажите как это Вам удалось.
Проект всегда компилируется во что-то одноУ меня есть классы объявленные в файлах без модификатора доступа , вроде они по умолчанию должны быть internal, и студия по началу вроде не ругается и ничего не подчёркивает, а компилировать не хочет, только с public'ом получается. Вот я и подумала, что может студия видит файлы как разные сборки...
А если стоит "консоль", тогда каждый добавленный .cs файл в свою сборку компилируется?Не рекомендую использовать консоль. У него есть своя специфика, которая может привести к проблемам с AutoCAD .NET API.
Расскажите как это Вам удалосьЯ может что-то не то сказала, только начинаю знакомиться с С#
Не рекомендую использовать консольИспользую в целях "быстрого старта" так сказать. Потом, конечно, сделаю по нормальному в виде приложения
вроде они по умолчанию должны быть internalНе internal, а private - поэтому из других классов и не видны.
switch ( expression )как то вы сильно замудрили...
case constant-expression : statement
[default : statement]
вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>) - Python-Style!А чем if() не устраивает?
А чем if() не устраивает?не хочится длиную портянку использовать
вместо Swith Case можно использовать словарь (Dictionary<int, Delegate>)Мне вот только не понятно, как...
Для count можно использовать case switchвместо Swith Case можно использовать словарь (Dictionary<int, Delegate>)Мне вот только не понятно, как...
У меня в общем цикл, количество итераций count зависит от ввода пользователя. В теле для каждого элемента выполняется стандартный алгоритм один и тот же, только для первого и последнего элемента (он же count) есть дополнительные действия. Если использовать If, то часть кода (стандартный алгоритм) придётся повторно писать, чего не хотелось бы. В VBA такой проблемы не было
Если использовать If, то часть кода (стандартный алгоритм) придётся повторно писатьтак ты его в отдельную функию вынеси
Для count можно использовать case switchнельзя, получишь "constant value is expected" (https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs0150)
нельзя, получишь "constant value is expected"Да, именно это я и получаю
В качестве ключа планируется использовать структуры с большим количеством полей разных простейших типов (не ссылочных).Ключа или данных?
Ключа или данных?ДА. Так можно? ли это не лучший вариант
Если честно, то мне не приходилось видеть, чтобы в качестве ключа использовали сложную структуру. Обычно ключ это что-то простое (адрес, число, строка, ObjectId), а вот значение может быть сложной структурой/экземпляром класса.Ключа или данных?ДА. Так можно? ли это не лучший вариант
Кроме как переопределить метод ToString() структуры (чтобы формировал пары "поле"-значение в строку и в конце сделать конкатенацию строк) и вызвать на результате GetHashCode() класса String , ничего не приходит в голову. Буду пока так пробоватьЯ тоже не вижу лучшего пути.
А не подскажите ещё: как я поняла, механизм метода Hashtable.Add() вычисляет хеш код ключа и смотрит, если есть уже в таблице такой код, то сам (?) вызывает Equals , сравнивая содержимое объектов? И я недопоняла?https://msdn.microsoft.com/ru-ru/library/system.collections.hashtable.add(v=vs.110).aspx
или Add не проверяет?Add выдаёт исключение, если такой ключ уже есть.
Мне не надо перезаписывать, а наоборот, если есть , то вернуть , что есть, если нет - то записатьТогда еще проще:
не происходит ли двойной поиск ключа в словаре?Так как коллекция упорядоченная, то поиск происходит очень быстро (не последовательным перебором). Так что об этом можно не беспокоиться.
Так как коллекция упорядоченная, то поиск происходит очень быстро (не последовательным перебором). Так что об этом можно не беспокоиться.Вот тут , пожалуйста, поподробней.
что надо изменить, чтобы два раза не выполнялась проверка ключаНе обращайте внимания. В крайнем случае используйте SortedDictionary<> вместо Dictionary<>
Не срабатывает установка размеров из списка в зависимости от пользовательского ввода через if else.А как проявляется это самое "не срабатывает"?
Есть ли решение этой проблемы?Если я правильно понял вопрос, то может это подойдёт:
Есть ли решение этой проблемы?Если я правильно понял вопрос, то может это подойдёт:
https://stackoverflow.com/questions/19270018/wpf-style-for-control-library
https://stackoverflow.com/questions/9739032/set-up-application-resources-from-code
Здравствуйте. Проблема в задании стилей для WPF. Хочется сделать это централизовано как в обычном WPF приложении. Но так как вынужден делать через библиотеку классов, не получается подключить ResourseDictionary со стилями, так же просто (обычно это делал через App.xaml), но в библиотеке классов нет такой возможности. Есть ли решение этой проблемы?Все там замечательно подключается и работает!
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работает
Вильдар, все решается намного проще - нужно ResourceDictionary подключать не к App.xaml, а к ресурсам каждого окна. Может это и не универсально, зато точно работаетБлагодарю!
работая в visual studio c# возможно ли проверять код не перезапуская автокад?По простому - нет.
работая в visual studio c# возможно ли проверять код не перезапуская автокад?Есть такой вариант https://github.com/vildar82/AcadAddinManager
где там ответ?Используйте не DragEnter, а DragOver
там получают файлы.
а мне нужно запретить пихать в листбокс все кроме файлов.
и в конце концов интересно почему выставляя effects=none ничего не меняется и я все равно могу что угодно дропать в лист(
Возник вопрос касательно класса FileSystemWatcher.У меня с этим не было проблем.
можно ли им пользоваться, если дело касается сетевых дисков?
То такой ситуации не возникает. И одинаковость файлов определяется корректно.Ну видимо для этого потока асинхронное считывание недопустимо...
может попробовать Directory.Build.propsПопробовал. Получилось. В самом деле можно переместить все линки на исходники в Directory.Build.props и проект будет компилироваться. И можно создать сколько угодно файлов .targets с такими же ссылками. Только придется в ручную прописать эти таргеты в csproj. Так тоже работает. Но есть один нюанс... обозреватель решений в VS вообще никак не показывает ни файлы с кодом, ни targets... Т.е. можно вообще пустой проект оставить, но он будет компилироваться!! Выглядит как шаманство. Работать с таким проектом невозможно - ни как файл не открыть. Думаю оставить один нормальный проект. Но боюсь потерять контроль, что там компилируется в остальных проектах...
Но насколько тебе это будет удобно использовать - это вопрос.В таком виде, без поддержки визуальных редакторов VS, - да, удобство под большим вопросом...
Можно программно пробежаться по папкам решенияДа можно и не программно - Notepad++ прекрасно подменяет текст в любом количестве файлов заданного типа. В случаях переименования я только так и делаю. Но я искал более удобные встроенные возможности самой VS. И они даже нашлись, вот только реализация... не очень.
Почитал в Wiki про этот XAML - похоже это другое название для форм WPF.не совсем, у WinForms есть .Designer.cs - где находится код генерации формы, его можно править ручками, но так как он автогенерируется - лучше этого не делать
Или еще лучше - как использовать для дела?Очень клевая фича, кстати! Можно изменять разметку окон прям на живую во время отладки и сразу видеть результат. Конечно, с плагинами не прокатит, хотя вроде тоже получалось.
Всех приветствую.
Кто-нибудь тут пользуется Regex? Я не могу решить задачу с помощью только одного Match.
Есть строки типа "A1=A3", "A1-10", "SF10", "01.XT5". Мне нужно получить вот такие группы соответственно: (A1=A)(3), (A1-)(10), (SF)(10), (01.XT)(5).
Не хватает мозгов чтобы написать паттерн для всех случаев. Пока только сделал вот такой костыль:Код - C# [Выбрать]
string str = "A1=A3"; string number = Regex(str, @"\d+$").Value; string device = str.TrimEnd(number.ToCHarArray());
Проверил в VS, не работает. Да и не понятно как может работать, если в паттерне указываются только цифровые символы и точка, хотя мне надо получить две группы цифро-буквенно-символьных знаков и цифр. Цифры в конце получаются гораздо легче из примера моего костыля.Всех приветствую.
Кто-нибудь тут пользуется Regex? Я не могу решить задачу с помощью только одного Match.
Есть строки типа "A1=A3", "A1-10", "SF10", "01.XT5". Мне нужно получить вот такие группы соответственно: (A1=A)(3), (A1-)(10), (SF)(10), (01.XT)(5).
Не хватает мозгов чтобы написать паттерн для всех случаев. Пока только сделал вот такой костыль:Код - C# [Выбрать]
string str = "A1=A3"; string number = Regex(str, @"\d+$").Value; string device = str.TrimEnd(number.ToCHarArray());
Одна минута гугла и тыц - вот ответ (https://stackoverflow.com/a/14294200).
И проверка:
(https://i.postimg.cc/kRVGBXmj/image.png) (https://postimg.cc/kRVGBXmj)
Проверил в VS, не работает
Проверил в VS, не работает
На скриншоте отчетливо видно, что паттерн работает. Если вы применить его в коде не можете, то это уже другой вопрос
Вот вариант с разбивкой на группы:Что это за магический сайт? У него свой Regex? Ни один пример не работает в VS, как не используй класс Regex. Может конечно я что-то не так делаю, но что там делать в 2-3 строчках.Код - C# [Выбрать]
(.*?)(\d+(\.\d+)?$)
Тут даже не надо потом мудрить с выниманием нужных данных из строки, так как сразу можно получить две группы (https://docs.microsoft.com/ru-ru/dotnet/api/system.text.regularexpressions.match.groups?view=net-5.0)
(https://i.postimg.cc/MXTpJFw5/image.png) (https://postimg.cc/MXTpJFw5)
Что это за магический сайт?
Может конечно я что-то не так делаю
Вероятнее всегоТак, а что может быть не так?
https://regex101.com/А где там C#?
https://regex101.com/А где там C#?
https://regex101.com/А где там C#?
А причем тут C#? Regex - это не фича сишарпа
Вот проверил - все работает:
(https://i.postimg.cc/jWn30K5N/image.png) (https://postimg.cc/jWn30K5N)
Всех приветствую.
Кто-то может объяснить на пальцах, что такое внедрение зависимостей и зачем огород с интерфейсами и их реализацией? Или такое не объяснить на пальцах?
Сколько не читаю разных людей и не смотрю разных примеров, не могу найти практического применения. Или это всё из-за того, что я пока не писал/не видел/не работал на больших проектах где DI даёт преимущество?
При разработке проектов уровня плагинов - это как забивание гвоздей кувалдой. Даже если вы разберетесь с этим, то толку от этого будет нольВполне вероятно. Я просто иногда читаю по C# литературу, смотрю примеры и сталкиваюсь с новыми понятиями/инструментами/подходами и мне становится интересно изучить всё это. И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.
При разработке проектов уровня плагинов - это как забивание гвоздей кувалдой. Даже если вы разберетесь с этим, то толку от этого будет нольВполне вероятно. Я просто иногда читаю по C# литературу, смотрю примеры и сталкиваюсь с новыми понятиями/инструментами/подходами и мне становится интересно изучить всё это. И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.
И вот бывает так, что я не понимаю, что к чему и зачем вообще это придумали.Значит, ещё пока рано браться за такие вещи. Это примерно как браться за изучение высшей математики в начальных классах, когда только-только таблицу умножения выучили. Нужно как-то постепенно к этому приходить. Сперва понять что такое ООП и как им пользоваться. Потом понять, какие проблемы могут возникать и как решают эти проблемы. Тогда будет понятнее, зачем применяют шаблоны (паттерны) и придерживаются принципов (SOLID и т.п.). Поизучать про тестирование приложений и понять, как писать код, который будет легче тестировать. И потом уже должно прийти понимание, что DI (dependency injection) - это довольно полезная штука. Есть и минусы, конечно.
Значит, ещё пока рано браться за такие вещи. Это примерно как браться за изучение высшей математики в начальных классах, когда только-только таблицу умножения выучили. Нужно как-то постепенно к этому приходить. Сперва понять что такое ООП и как им пользоваться. Потом понять, какие проблемы могут возникать и как решают эти проблемы. Тогда будет понятнее, зачем применяют шаблоны (паттерны) и придерживаются принципов (SOLID и т.п.). Поизучать про тестирование приложений и понять, как писать код, который будет легче тестировать. И потом уже должно прийти понимание, что DI (dependency injection) - это довольно полезная штука.Исходя из этого выходит, что я вообще ничего не понимаю :'( ;D
Исходя из этого выходит, что я вообще ничего не понимаюТак это нормально. Просто надо учиться и практиковаться. Со временем понимание придёт. Я помню в 2012 году когда первую книгу по C# читал, например, совсем не понимал зачем в языке есть такие вещи как интерфейсы - и так же понятно, что у класса есть такие-то методы и свойства. Зачем дополнительно их выносить в описание без реализации? На крайний случай, есть базовые классы, абстрактные классы. В общем, непонятно было. Потом, когда столкнулся с проблемой при разработке, когда понадобилось сделать одинаковую обработку для совершенно разных классов и даже структур, тогда вспомнил: "о, так есть же интерфейс!". Ну и так со всем остальным.
Делаю отображение муниципальной иерархии, сделал хитрую форму
К форме через интерфейс цепляется вьюмодель.
понял, что мне нужна административная иерархия
Сделал новую вьюмодельЗачем тут прослойка в виде интерфейса? По сути нас это ни от чего не избавило, судя по Вашему сообщению.
Зачем тут прослойка в виде интерфейса? По сути нас это ни от чего не избавилоsoliD (https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%B8%D0%BD%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B5%D0%B9)
попытаемся обратиться к ней также через транзакциюЭто как?
И вот я добрался до заветных полей "Tag" и "TextString" и т.д. и все это в рамках одной транзакции. Получается мне нельзя эти поля сохранить, чтобы обратиться к ним из другой функции.Ну почему же нельзя. Указанные вами поля имеют тип string - строки можно сохранить. А вот сами наследники DBObject вне рамок транзакции невалидны.
Подскажите как быть со сторонними библиотеками? Для склеивания pdf использовал библиотеку itext7 добавив через nuget, работает нормально, но теперь к dll в 250 кб прилагается пара десятков других размером под 18 метров, с этим можно что-то сделать или так и придется их таскать со своим файлом?Придется таскать. И более того - эта библиотека платная!
Для склеивания pdf использовал библиотеку itext7Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.
И более того - эта библиотека платная!Вроде iTextSharp5 можно использовать бесплатно
5.5.13.3 - последняя версия, которую можно использовать бесплатно. Но в вопросе указана 7 версияИ более того - эта библиотека платная!Вроде iTextSharp5 можно использовать бесплатно
Возможно тебе будет достаточно библиотеки itextsharp (бесплатная). Там требуется таскать только одну dll, размером меньше 2.5Мб.Блин, я сначала как раз itextsharp собрался ставить, но прочитал прям в ее описании что она устаревшая и вместо нее itext7 и поставил ее, сейчас поменял, правда пришлось полностью переписать модуль соединения, на этот раз написал сам, старый просто в виде функции скачанной из инета был. Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся). Спасибо за совет.
Теперь из дополнительных файлов только сам itextsharp.dll и BouncyCastle.Crypto.dll(хз что это, видимо что то в itextsharp использующееся)Точно. Про вторую dll я забыл.
И более того - эта библиотека платная!А какой вообще признак платной библиотеки? Это только в пользовательском соглашении прописывается?
Если используется WPF, я бы подумал на предмет валидации данных в окне.Обычный winform
https://habr.com/ru/post/209820/ ?ну немного не то, у меня в textbox просто не вводятся или не вставляются символы, которые не являются числами, вопрос в том, что функция лежащая в самом классе формы работает нормально
itext7Если я не ошибаюсь itext5 был бесплатным, а потом сделали itext7 и он уже под другой лицензией
Может, нечто типа:
Char.IsDigit(e.KeyChar
Проще будет сделать так, после ввода симола пробовать парсить строку в нужное числоВот это очень плохой вариант, у меня помню парс игнорил запятую если она разделитель и выдавал число как целое состоящее из дробной и целой части, так что тут все не так просто, я просто запретил ввод всех символов кроме чисел, точки, запятой и минуса, причем запятая автоматом на точку заменяется, ну и там проверки что минус может быть только первым и только один, точка только одна и не может быть первым символом и тд. ну и запрет на копирование в ячейку, дает почти 100% шанс что ничего лишнего там не окажется, а парсится если это значение вообще если понадобится.
if (int.TryParse(text, out int res))...
if (double.TryParse(text, out int res))...
Вот это очень плохой вариант, у меня помню парс игнорил запятую если она разделительИ поэтому это плохой вариант и нужно городить кучу кода для проверки?
И поэтому это плохой вариант и нужно городить кучу кода для проверки?
а text.replace(',', '.'); впереди не судьба добавить?
Если вызывает функцию другого класса.А этот другой класс статический?
А этот другой класс статический?Из которого вызывается обычный, вызывается статический.
Не понял, если честно. У тебя есть событие, которое обращается к методу статического класса (валидатору, так обзову). Валидатор в свою очередь обращается к методу второго класса. И вот этот второй класс - статический? Ну так, на всякий случай.Событие напрямую обращается к валидатору в статическом классе.
как заставить Студию из этих пакетов вытащить только нужные dll и скопировать в папку плагина?Насколько я знаю никак
как заставить программу на компьтерах пользователей находить эти dll в папке плагина (просто положить рядом с основной dll не помогает)?AssemblyResolve или ее альтернативы, которые на форуме болтались - это если говорить про ACAD-дополнения.
Или может есть еще варианты, как лучше передавать пользователям эти nuget?NuGet имеет смысл, как мне кажется, только для разработчика. Пользователям инсталлер подавай ;)
1 Для автоматической записи в bundle.Раз файл поставляется с плагином внутри bundle, то там и хранить его можно. Там же куда компилируются dll плагина. В bundle обычное есть подпапка Contents\Resources - вот хорошее место.
xcopy /Y "$(TargetPath)" "%AppData%\Autodesk\ApplicationPlugins\XXX.bundle\Contents\"
xcopy /E /I /Y "$(ProjectDir)Resources" "$(TargetDir)Resources"
xcopy /E /I /Y "$(ProjectDir)Resources" "%AppData%\Autodesk\ApplicationPlugins\XXX.bundle\Contents\Resources"
xcopy /Y "$(TargetPath)" "c:\Autodesk\C#\XXX.bundle\Contents\"
xcopy /E /I /Y "$(ProjectDir)Resources" "c:\Autodesk\C#\XXX.bundle\Contents\Resources"