Ответы пользователя по тегу C#
  • Стек технологий для разработки корпоративного приложения с desktop клиентом?

    mindtester
    @mindtester Куратор тега Windows
    http://iczin.su/hexagram_48
    1 - ну не факт про формы (сразу в трэш) - все зависит от сложности клиентской стороны. простой клиент на формах будет проще и создать и поддерживать (красивые мордочки есть, достаточно правильно задать вопрос тут или поисковикам) если функционал сложный, много повторяющихся элементов, нужен надежный биндинг - тогда да, wpf

    2 - если сервер внутрикорпоративный - можно и на прямую с БД работать, опять же от сложности бизнес-логики все зависит, возможно стоит посмотреть на SignalR есть кейсы/демки прямо вот под десктоп клиента

    однозначый совет невозможен - у любой задачи/команды есть особенности, есть различия и в навыках и в ресурсах, как требуемых, так и наличиствующих

    если речь о небольшой конторе, где все уже на вин10 - почему не рассматривать сразу UWP?
    если вдруг УЖЕ есть лицензия на MS SQL - довесить SSRS и возможно 90% нужд покроет готовый бесплатный UWP клиент?
    Ответ написан
    4 комментария
  • Как вызвать метод родителя родителя?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    (this as A).Method()

    ((A)this).Method()

    ps .. сам не пробовал ))

    pps .. попробовал.. не прокатило ((

    кстати - protected вообще не дает использовать Method() в Some()

    ppps любопытно, что на stackoverflow полно ответов типа моего, при чем многие отмечены ответами

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

    по поводу расширений - это вообще инструмент, позволяющий много разных элегантных решений

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

    вообще, с годами, убеждаюсь, что городить свою иерархию классов ооочень далеко НЕ всегда оправдано

    pppps ну и раз такое дело - на всякий случай тоже подпишусь, вдруг есть современное решение ))

    обещанный эскиз на основе расширений https://dotnetfiddle.net/UTPZLv
    Ответ написан
  • Сочетание трех клавиш не работает?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    в тех же формах есть 2 типа событий:
    - KeyPress - чаще всего используют его, но оно происходит при нажатии и последующем отпускании клавиши (не модификатора, "обычной")
    - KeyDown/KeyUp - эти честно отрабатывают каждое нажатие и отпускание. можете копнуть в этом направлении. при нажатии нужной клавиши, установить свой внутренний флаг (кстати драйвера так и работают с модификаторами) при отпускании - снять флаг.. когда поймаете нажатие 3й клавиши (тут уже любым способом) - если и модификатор нажат, и ваш внутренний флаг установлен - это и есть нужная ситуация

    но вообще не стоит слишком мудрить в этой области - в VS ctrl+k затем +c - это комментирование выделенного блока, но это последовательность, а не одновременная комбинация

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

    иногда ломать стереотипы полезно, а иногда нет

    ps

    для компонентов форм, в окне "свойства" студии, есть вкладка "события".. там же легко и обработчики создавать (кликом) и отменять их, и кнопкой F1 вызывать MSDN, для русской студии, существенная часть на русском (в отличии от поисковиков)
    Ответ написан
    Комментировать
  • Как в C# можно на этапе подключения (до select) определить это sqlite3 база или какой то другой файл?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - по вашей задумке, придется открывать файл, проверять сигнатуру (см ответ cicatrix), в случае успеха закрывать.. открывать уже как базу, но это не гарантирует ни правильность пароля, ни того что файл не битый и тд..

    2 - при наличии проблем с доступом, все равно будут исключения, а знания о том база ли это? вы не получите

    я к тому что обьем вспомогательной работы будет расти, и больше чем оно того стоило

    может все таки просто обрабатывать исключения? на сколько я помню.. исключения по правам доступа вполне себе распознаются. думаю и исключения библиотеки для sqlite3 тоже вполне вменяемы
    Ответ написан
    5 комментариев
  • Как проверить папку на появление новых файлов?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Класс FileSystemWatcher - можно подписаться на все основные типы событий файловой системы

    ps не пользовался уже, давно, звиняйте, пример кода не предлагаю, но по ссылке есть ))
    Ответ написан
    Комментировать
  • C# Обработка события?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    попробуете изменить тут
    str1 += tbArray[i, j].Text

    ps строка 78 исходника.. а вообще сам подход.. по меньшей мере странен.. TexBox это отображаемый контрол, но 100 текстбоксов - это откровенная несуразица... такой UI не жизнеспособен.. ну а если не нужны визуальные контролы - используйте строки.. или StrinBuilder, в зависимости от задачи

    pps у всех потомков obj, есть метод ToString() .. но он возвращает тип объекта.. далеко не все потомки obj имеют поле Text, по этому, разработчики, вполне логично, не переопреоделяют данный метод, без явной необходимости

    ppps наиболее очевидные поводы, переопределять ToString() у типов вроде Int32, Int64, Float, Double, в общем у value-типов.. но TextBox (повторюсь) визуальный контрол, если вы не планируете насиловать внимание пользователя, просмотром 100 (или более?) текстов.. то, тем не менеее, вы будете насиловать ресурсы компа )).. и ЦПУ, и ГПУ, на их отображение, или по меньшей мере, готовность к отображению... я думаю, вам стоит пересмотреть архитектуру своего приложения

    pppps если вы используете заготовки чужего кода, обратите внимание, что TextBox.Text это: - во первых реальное хранилище текста, во вторых это банальный string... надеюсь эта подсказка поможет

    ppppps дружите с MSDN.. благо кнопка F1, в абсолютно бесплатной студии VS 2017 Community очень в этом помогает
    Ответ написан
    2 комментария
  • Как десериализовать JSON в объект класса C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - https://github.com/JamesNK/Newtonsoft.Json стандарт дефакто для .Net

    2 - есть родной сериализатор/десериализатор, но менее удобный

    ps самое смешное, как раз на встроенном, пару лет назад, десериализовал довольно простой json в анонимный класс, то есть без предварительного описания структуры, без контрактов и тд... совсем недавно вспомнил об этом... и не смог найти тот код )) ... таки пошел смотреть Newtonsoft ... и в итоге доволен как слон, всем рекомендую, доки простые, много примеров, почти не надо читать на английском, много простого кода примеров
    Ответ написан
    Комментировать
  • Нужны ли разработчики .Net?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    1 - просто что то делайте, это лучше чем ни чего. если делаете за деньги - вы уже растете. но в любом случае, постоянно что то делайте )).. и лучше разное ))

    2 - смотрите статистику вакансий по языка/платформам. .Net разработчики нужны точно. мало того, конкурирует обычно только java. но вроде, недавно, на хабре, пролетал обзор, что в США, спрос на .Net/C# уже начал перевешивать
    Ответ написан
    Комментировать
  • WPF еще не умер?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Но все же я вижу, что люди кодят на WPF

    <сарказм>не не.. не обращайте внимания.. умер, умер..< / сарказм>

    ps вообще то в WPF реализована одна из лучших и надежнейших в мире, систем биндинга данных, в корпоративном секторе (виндовом конечно) его не скоро кто то потеснит

    pps
    если хочешь писать красивые desktop приложения - то используй DevExpress, а не WPF
    это место особо доставляет.. а ни че что "девки" поставляют практически полный набор своих контролов под WPF? они себя не унижают этим?.. случайно?

    ppps исправлено.. неоднократно.. извиняйте ))
    Ответ написан
    4 комментария
  • Как передать пароль в UAC?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    удивлюсь если вы получите легитимное положительное решение. UAC по сути своей и предназначен препятствовать именно такому сценарию (не только такому, но такому точно)

    но на всякий случай тоже подпишусь ))

    в частности из клипбоарда, в UAC вставляются строки, но у меня сильное подозрение что SendKey обломается, только Ctrl-V (Shift-Ins) с физической консоли

    если сможете обойти - поделитесь ))

    ps

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

    pps

    хмм.. ну тогда уж копните и в сторону:

    var pfProc = new Process();
    pfProc.StartInfo = new ProcessStartInfo(...);
    pfProc.Start();
    Ответ написан
    7 комментариев
  • Как сделать CGI-программу на С#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    у меня смутное подозрение, что вы пытаетесь все усложнить...

    1 - CGI - три буквы, которые можно вспоминать, только когда на сервер уже отправлен какой то запрос

    2 - все таинство, как возникает запрос к серверу, при заполнении формы, происходит на клиентской стороне, в браузере, ключевые слова - html, js, фронтэнд фреймфорки (а их сейчас как собак не резаных).. но C# туда впихнуть пока не реально.. есть кросскомпиляторы, но это не отменяет необходимости хорошего понимания, всего что происходит в браузере.. возможно, в будущем, будет и кросскомплер в webassembly

    3 - после того как разберетесь с фронтэндом, CGI можно писать на любом языке.. но если вы опираетесь на стек .NET - попробуйте хотя бы, для начала, осилить asp.net webforms.. потом asp.net mvc (там очень, очень много всего уже решено для вашего удобства.. а вы типа в каменный век хотите)

    ps

    если с фронэндом вы справитесь - CGI на C# - это просто консольное приложение, а вот как его цеплять в IIS/Apache.. как парсить ввод, как генерить html-ный вывод... все таки - попробуйте asp.net

    pps

    стандартный ввод это Console.ReadLine(), стандартный вывод - Console.WriteLine() - вот вам все что делает приложение пригодным к CGI... все остальное надо понимать в голове и кодить ручками
    Ответ написан
    Комментировать
  • Нормально ли отправить письмо самому себе (Яндекс)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    есть что то в этом такое... )))

    (хочется посоветовать визит к психотерапевту - шутка ;)))

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

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

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

    (ну и если фильтры не срабатывают на признаки терроризма ;))
    Ответ написан
    Комментировать
  • NancyFx как узнать время выполнения асинхронного запроса?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    Ответ написан
    Комментировать
  • Хочу "шагать" весь код C# в VS, как это осуществить?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    все просто - https://i.imgur.com/HCEUEq0.png

    ps

    другой вопрос, если хочется залезть в чужие сборки (то что называется 3я сторона)... но тогда нужен не
    Решарпер и его функцию Decompile methods
    а RedGate Reflector пираты в помощь... если жаба душит..
    Ответ написан
  • Где практиковать .Net C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    вообще то практиковать на компе дома/на работе..

    .. или вам додзё надо? тоже есть https://www.codewars.com/
    Ответ написан
    Комментировать
  • Как переменная одного типа в C# может присваиваться другому, если они не находятся в одной ветви наследования?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    это значит, что существует или перегруженный оператор присваивания, но скорее всего просто расширение типа, для необходимого преобразования
    Ответ написан
    Комментировать
  • Какие есть способы подмены имплементации контракта в c#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    и как вы себе это представляете?

    контракты в большей степени директивы компилятору

    если у вас есть исходники - переопределяйте на здоровье.. нет?... - изучайте cil и ildasm ... так же RedGate Reflector в помощь ..
    .. и будете богом
    Ответ написан
    Комментировать
  • C#. Как переназначить кнопку закрытия программы(крестик в углу)?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    копать в сторону user32.dll (вечером с усталости.. ни че внятного пока больше не скажу)

    ps

    придется осмыслить что такое win32 api, хендл окна, атрибут [DllImport("USER32.DLL")] .. и кучу всяких попутных нюансов.. удачи..

    ps я очевидно отрефлексировал по своему старому опыту ))
    .. на слова "переопределение" и крестик - убрать заголовок окна, переопределить содержимое меню окна, убрать крестик .. вот о чем подумал
    .. а OnClosing главной формы.. не то что бы я не знал, просто всегда использовал для действий перед закрытием программы..
    .. я уже успел сообразить типовой сценарий - сворачивание в трей, и с треем был опыт, просто я выбрал стратегию писать легковестный агент для трея, и отменять закрытие не было в моей практике, то есть снова не замкнуло )))
    .. ну и сделайте скидку на возраст )).. мне 52.. и уже с половиной )) .. тем не менее - я кодирую, при чем все еще, не редко, за деньги ;)))

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

    всем спасибо! всем удачи! ))
    Ответ написан
    6 комментариев
  • Разработка под Android на C#?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    если вы отлично знаете C# + отлично знаете Xamarin = это очень весомый аргумент

    но если планируете начать... - в java вы будете собирать грабли java и android... а в xamarin ++ грабли xamarin

    ps

    Unity сам по себе, и сам в себе C#

    вы уж определитесь сами... есть люди пишущие на многих языках.. можно оба языка осваивать, можно и один. но в любом случае, разработка для андроида - это кросс-разработка. легко не будет. и как всегда, что бы начать - надо начать
    Ответ написан
    3 комментария
  • C#(Unity) - Чем можно заменить бесконечный цикл for?

    mindtester
    @mindtester Куратор тега C#
    http://iczin.su/hexagram_48
    хорошо сформулированный вопрос, содержит не менее половины ответа


    при использовании бесконечного цикла ( for(; ;) ), игра просто зависает. Из-за чего это происходит?


    по тому что нет выхода из цикла... неужели трудно догадаться?

    это классическая ошибка. и не надо его ни чем заменять.. просто надо из него выходить (break или return по какому то разумному условию)

    ps

    если вы уже пытались предусмотреть выход, но он не происходит - осталось полшага до гениального озарения - условие выхода не выполняется
    Ответ написан
    Комментировать