• C# и Шилдт, как пройти книгу по своему первому ЯП и не взорвать мозг?

    @Oblomingo
    Сам лет пять назад учился по Шилдту. Мужик все очень грамотно обьясняет, читать очень приятно.
    Вот я и читал дома по вечерам, на природе возле озера даже брал книгу с собой к теплому морю.
    Она дала теоретический базис и послужила хорошим фундаментом для дальнейшего изучения.
    А дальше была книга WPF и вот тут пошла практика и пригодились все знания из Шилдта.

    Я вам советую сейчас не сильно огорачться если "не хватает оперативки", просто дочитайте книгу до конца. Не надо запоминать наизусть, просто убедитесь что понимаете код, который написан в параграфе. Даже если вам кажется, что вы мало чего запомнили, в голове у вас основы останутся и всплывут в памяти когда это потребуется.
    Ну а после Шилдта берите что нибудь из прикладных .Net технологий - напишите интернет сайт (прокачаете web навыки, что поможет найти работу) или десктопное приложение, можете попробовать простенькую игру (тут вы познакметесь с паттернами проектирования).
    Вы только встали на длинный, интересный но трудный путь программиста. Немного терпения и у вас все получится!
    Ответ написан
    1 комментарий
  • Почему arduino не выводит HIGH от датчика обхода препятствий?

    proudmore
    @proudmore
    В этом:
    int pin = 8; // d5
    Вы считываете не с 5 пина, а с 8.
    Ответ написан
    4 комментария
  • Почему не корректно работает четырёхканальный датчик обхода препятствий для ардуино?

    @GreyPhantom
    АСУТП, КИПиА
    Между свето- и фотодиодами на мелких модулях перегородок нет? Вероятнее всего- фотодиод напрямую засвечивается от светодиода- потому и сигнал "препятствие" появляется. Эти датчики, по идее на отражение работать должны,- т.е. прямую засветку нужно исключить. Попробуйте надеть на них(на светодиоды) какие-нибудь трубки...
    Ответ написан
    1 комментарий
  • Почему не корректно работает четырёхканальный датчик обхода препятствий для ардуино?

    @kalapanga
    Из описания "рабочий ток: старайтесь выбирать более 1A питания"
    У Вас устройство запитано от Ардуино, которое питается от чего? USB-?
    Тогда плате может питания не хватает. Попробуйте запитать от отдельного источника достаточной мощности.
    Ну и методически всё ли правильно проверяете? Выставьте потенциометр в среднее положение и приближайте препятствие от 60 см до упора. Где-то должно сработать.
    Ответ написан
    1 комментарий
  • Стоит ли сейчас учить C# и .NET?

    EreminD
    @EreminD
    Кое-что умею
    Тут, конечно, можно вдариться в долгие рассуждения про важность C#, про различие сфер применения .net и питона.
    Еще можно порыть статистику и сказать, на сколько сотых процента питон (не)обгоняет .net и все такое.

    Давайте, я просто напишу, что язык точно не умирающий и сомневаться в востребованности не нужно.
    А если говорить конкретно про ASP.NET, многие полагают, что с выходом ASP.NET Core, популярность пойдет только вверх
    Ответ написан
    Комментировать
  • Как правильно искать совпадения с рекулярками вида "*туттекст*тутещетекст*", где * любая последовательность символов?

    Ivanq
    @Ivanq
    Знаю php, js, html, css
    Вместо * пишите .* Звездочка обозначает от 0 повторений предыдущего символа. Плюс обозначает от 1 повторения. Точка - любой символ. .* - любое количество любых символов.
    Ответ написан
    Комментировать
  • Куда развиваться в C#?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Го на работу устраиваться, а то так можно всю жизнь учиться.
    Ответ написан
  • Куда развиваться в C#?

    Nipheris
    @Nipheris Куратор тега C#
    с подсветкой синтаксиса

    хм, неплохо если вы его уже реально напишите.

    Собственно, что нужно читать, писать, смотреть, чтобы развиваться?

    Прикладное направление выберите для начала. Стандартный выбор на сегодня: веб-бэкенд/десктоп/игры/мобайл. Соответственно: ASP.NET 5ASP.NET Core 1.0/WPF/Unity/(UWP/Xamarin)
    Ответ написан
    4 комментария
  • Event - это value или reference type в C#?

    DmitryITWorksMakarov
    @DmitryITWorksMakarov
    event так относится к экземпляру делегата ( Станислав Макаров : мультикаст ), как property относится к значению поля.

    event - это синтаксический сахар, обертка для методов add и remove, как property является оберткой к методам get и set.

    Таким образом, вопрос некорректен, поскольку event не тип.
    Ответ написан
    6 комментариев
  • Как имитировать клик по выпадающему списку vk.com при помощи javascript?

    YardalGedal
    @YardalGedal
    yeah boy
    Вы уверены, что Вам это нужно? Может быть вот этот кусочек html кода на что-нибудь Вас натолкнёт?
    <input type="hidden" name="pedit_status" id="pedit_status" value="X" class="resultField">
    Ответ написан
    5 комментариев
  • Как узнать причину вылета .NET программы на удалённом сервере?

    lasalas
    @lasalas
    .NET Architect
    1.
    AppDomain.CurrentDomain.UnhandledException 
           += (_, e) => Environment.FailFast("", e.ExceptionObject as Exception);

    2. VS/Remote Debugger
    Ответ написан
    3 комментария
  • Есть ли более красивое решение для реализации такой системы?

    Nipheris
    @Nipheris Куратор тега C#
    Если планируется использовать дотнет (как для "процессов", так и для сайта), то имеет смысл использовать преимущества платформы. Я бы поступил следующим образом:
    - на ASP.NET реализовать логику сайта + бизнес-логику; здесь же - постановку "заказов" в очередь контроллера;
    - отдельный процесс операционной системы - контроллер (хост) для выполняющихся "процессов"; каждый такой контроллер (их может быть несколько) загружает в отдельный домены приложения (application domain) сборку/сборки с кодом "процесса", настраивая ему права доступа к окружающей системе (песочницу); т.о., при постановки задачи в очередь конкретному контроллеру (выбирать можно рандомно или по загруженности), последний, при готовности, создает домен приложения, грузит в него нужную сборку-плагин, и запускает код на выполнение с нужными параметрами.
    - код "процессов" оформлять в виде дотнетовских сборок; оформить интерфейс, который будет реализован каждой сборкой;
    - прогресс можно конечно писать в БД, но можно и не писать: правильно работающий контроллер может и сам докладывать о состоянии выполнения наиболее актуальные сведения; в тот же интерфейс, через который контроллеру отдаются в очередь задачи, можно добавить и возможность запроса состояния выполнения; на клиенте брать по ajax, только конечно не в цикле, а по таймеру.
    - в базу можно и нужно писать время старта/завершения задачи, результат (успех/ошибка) и т.д.;

    такая архитектура позволит вам выделить отдельные машины для сайта, отдельные - для исполнения, наращивать количество контроллеров "процессов" и количество машин, обслуживающих сам сайт.
    Ответ написан
    Комментировать
  • Как в WPF программно скрыть Button, а потом снова отобразить?

    artem_b89
    @artem_b89
    Сетевой бездельник
    У UI элементов есть свойство visibility. Соответственно при нажатии на кнопку нужно менять это свойство нужного элемента. https://msdn.microsoft.com/ru-ru/library/system.wi...(v=vs.110).aspx
    Ответ написан
    Комментировать
  • Как закрыть консольное C# приложение, если выскочит необработанное исключение?

    @smozhaykin
    Скорее всего дело в нативной библиотеке. Потестил:

    #include <exception>
    
    extern "C" {
        __declspec(dllexport) void CrashTest()
        {
            std::exception* ex = 0;
            ex->what();
        }
    }


    class Program
        {
            [DllImport("PInvokeCrashTest.dll", CallingConvention = CallingConvention.Cdecl)]
            public static extern void CrashTest();
    
            static void Main(string[] args)
            {
                AppDomain.CurrentDomain.UnhandledException += (s, e) =>
                    {
                        Console.WriteLine(string.Format("EXCEPTION: {0}", e.ExceptionObject.ToString()));
                        Process.GetCurrentProcess().Kill();
                    };
    
                CrashTest();
            }
        }


    Получаю

    Unhandled Exception: System.AccessViolationException: Attempted to read or write
    protected memory. This is often an indication that other memory is corrupt.
    at ExceptionTest.Program.CrashTest()
    at ExceptionTest.Program.Main(String[] args) in d:\PInvokeCrashTest\Exception
    Test\Program.cs:line 25


    и application has stopped working окно.

    Если добавить в конфиг файл
    <runtime>
    	<legacyCorruptedStateExceptionsPolicy enabled="true" />
    </runtime>


    то приложение завершается нормально:

    EXCEPTION: System.AccessViolationException: Attempted to read or write protected
    memory. This is often an indication that other memory is corrupt.
    at ExceptionTest.Program.CrashTest()
    at ExceptionTest.Program.Main(String[] args) in d:\PInvokeCrashTest\Exception
    Test\Program.cs:line 24


    Решение взято отсюда
    Ответ написан
    1 комментарий
  • В чём польза readonly полей в C#?

    grigorylug
    @grigorylug
    readonly - это просто маркер матаданных, которые анализирует компилятор, нужен для того, чтобы обеспечить инкапсуляцию на уровне полей и дать возможность определения значения в конструкторе типа и запретить дальнейшее изменение в коде явным образом (это не значит, что мы не можем изменять такие поля), тоже самое можно сделать и с помощью свойств - закрыв сеттер для изменений вне класса, но если вспомнить историю, то readonly появился раньше свойств, и свойства имеют более широкую область применения, так же поле помеченное readonly можно рассматривать как некую оптимизацию, в сравнении со свойством, т.к. поле будет давать/принимать значение быстрее свойства, за счет того, что свойство преобразуется компилятором в методы get_ и set_, на что тоже уходит время.
    Ответ написан
    Комментировать
  • В чём польза readonly полей в C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Значения полей readonly можно менять динамически, в конструкторе класса. Последующие изменения невозможны.

    public class MyClass
    {
    
      public readonly int Value = 0;
    
      public MyClass()
      {
        this.Value = 123;
      }
    
    }


    Для чего это использовать - зависит от фантазии.

    Например, можно создать класс User и сделать readonly поле, содержащее идентификатор пользователя. Таким образом, идентификатор пользователя можно будет указать только при инициализации класса и, в последующем, изменить его будет невозможно. Это позволит избежать проблем в логике, которые еще предстоит придумать :-)

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

    Значения констант являются фиксированными и изменять их программно невозможно. Количество типов для констант ограничено, в то время как поля могут иметь любой тип. Константы являются статическими, а поля не обязаны быть таковыми. В этом плане, readonly поля более гибкие, чем константы.

    В дополнение, немного кода (Console Application):
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Timers;
    using System.Threading;
    
    namespace ConsoleApplication20
    {
    
      class Program
      {
        static void Main(string[] args)
        {
          // создаем экземпляр класса
          var t = new Toster(199065);
          // выводим значение константы ProjectName
          // доступ только через Toster
          Console.WriteLine(Toster.ProjectName);
          // доступа к локальным константам здесь нет
          // Toster.CounterPattern
          // t.CounterPattern
    
          // выводим заголовок вопроса
          Console.WriteLine(t.Title);
    
          // бесконечность - не предел!
          while (true)
          {
            // t.Id = 123;
            // мы не можем поменять идентификатор
            // следовательно, этот код, логически, будет работать правильно
    
            // выводим число ответов
            Console.WriteLine("Ответов: {0}", t.AnswersCount);
    
            // t.AnswersCount = 123
            // мы не можем менять значение readonly свойства,
            // но оно может меняться внутри экземпляра класса
    
            // пауза 10 сек.
            Thread.Sleep(10000);
          }
        }
      }
    
      public class Toster
      {
    
        // публичная константа, доступ через Toster
        public const string ProjectName = "Тостер";
    
        // локальная константа, доступна только в рамках этого класса
        const string CounterPattern = "<span class=\"section-header__counter\" role=\"answers_counter\">";
    
        // публичные поля только для чтения
        // значение может быть установлено в конструкторе
        public readonly string Title = "Нет данных";
        public readonly int Id = 0;
        
        // свойство только для чтения
        // значение может меняться в процессе жизни экземпляра класса
        // при помощи локальной переменной
        private int _AnswersCount = 0;
        public int AnswersCount
        {
          get
          {
            return _AnswersCount;
          }
        }
    
        // это просто таймер
        private System.Timers.Timer Timer = null;
    
        // а это конструктор<s>, но не Lego</s>
        public Toster(int id)
        {
          if (id <= 0) { return; }
          
          // получаем вопрос
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", id));
          // из шаблона url тоже можно сделать константу
          // либо в классе можно сделать readonly свойство, 
          // которое будет на лету формировать итоговый адрес:
          // return String.Format("https://toster.ru/q/{0}", this.Id)
    
          // устанавливаем значения для полей
          this.Id = id;
          this.Title = WebUtility.HtmlDecode
          ( 
            result.Substring
            (
              result.IndexOf("<title>") + "<title>".Length,
              result.IndexOf("</title>") - result.IndexOf("<title>") - "<title>".Length
            )
          );
          // выдергиваем число ответов на вопрос
          this.ParseAnswersCount(result);
    
          // запускаем периодическую проверку <s>Менделеева</s>
          Timer = new System.Timers.Timer(10000);
          Timer.Elapsed += Timer_Elapsed;
        }
        
        // обработчик истечения интервала времени 
        private void Timer_Elapsed(object sender, EventArgs e)
        {
          var web = new WebClient();
          web.Encoding = Encoding.UTF8;
          var result = web.DownloadString(String.Format("https://toster.ru/q/{0}", this.Id));
          this.ParseAnswersCount(result);
        }
    
        // выдергиватель количества ответов
        private void ParseAnswersCount(string value)
        {
          int startstart = value.IndexOf("Ответы на вопрос");
          int start = value.IndexOf(CounterPattern, startstart) + CounterPattern.Length;
          int len = value.IndexOf("</span>", start) - start;
          _AnswersCount = Convert.ToInt32(value.Substring(start, len));
        }
        
      }
    
    }
    Ответ написан
    Комментировать