• Что есть в C++, чего нет в C#?

    15432
    @15432
    Системный программист ^_^
    На C/C++ можно написать системный драйвер или микропрограмму для железки.
    В C/C++ есть union
    В коде на C/C++ можно использовать ассемблерные вставки

    Как уже писали, из-за близости языка к ассемблеру и машинному коду, упрощается работа с структурами данных и указателями, отсутствуют проверки и прослойки, само исполнение кода производится быстрее. Не требуется наличие .NET Framework, можно создать программу, не требующую вообще никаких дополнительных библиотек и ПО.
    Ответ написан
  • Заказчик хочет больше работы за фиксированную сумму и не хочет доплачивать. Как урегулировать спор?

    x67
    @x67
    Ваш договор не имеет юридической силы в силу того, что в нем не прописаны ключевые условия. Например, если заключить договор, что Маша должна пачку молока Саше потому что он бука, то такой договор прокатит только в детском садике (потому что у них все серьезно). Правда еще следует поискать что нибудь подобное в законодательстве той страны, в юрисдикции которой может быть рассмотрен договор и действий которой вы опасаетесь ( если возвести все до крайней степени, то Россия, потому что ваша страна и Индия, потому что его страна, а вы хотите когда-нибудь там побывать и опасаетесь что из-за тяжб вам может быть отказано в получении визы).
    С психологической точки зрения наверное стоит спокойно объяснить заказчику, что он чудак, вы сделали то и то, потому что это было обговорено до начала проекта в скайпе, как вы и договорились в договоре, за это он должен вам денег и дальше вы можете сотрудничать на новых условиях или не сотрудничать вообще. В крайнем случае может стоит чуть пригрозить, сказав что у вас есть записи разговоров в скайпе и он полностью отвечает за свои поступки перед законом, а вы принципиальный человек. Если не получается найти точку взаимодействия, то просто прекращайте общение и удаляйтесь искать более адекватных клиентов и писать себе памятки о том, как не стоит заключать договора)
    Ответ написан
    Комментировать
  • На каком этапе лучше начинать изучать паттерны проектирования?

    Паттерны имеет смысл учить после 1-2 лет разработки.
    Хорошее место для старта - https://metanit.com/sharp/patterns/ (знаю их наизусть)

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

    Сначала учимся ходить, потом бегать.

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

    Это мое ИМХО.
    Ответ написан
    1 комментарий
  • Как в mysql получить записи старше одного дня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    WHERE `datetime` < NOW() - INTERVAL 1 DAY
    Ответ написан
    Комментировать
  • Как скачивать один файл в несколько потоков?

    petermzg
    @petermzg
    Самый лучший программист
    Создаете несколько потоков и в каждом задаете через параметр заголовка Range участок скачиваемых данных.
    В C# это делается так
    HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create("http://www.contoso.com");
    myHttpWebRequest.AddRange(50,150);

    Также необходимо знать, поддерживает ли удаленный Web сервер данный заголовок.
    Ответ написан
    2 комментария
  • Как разобраться в битовых масках или как их там?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Про двоичное представление чисел вы же в курсе?
    0 = 0000 0000
    1 = 0000 0001
    2 = 0000 0010
    3 = 0000 0011
    4 = 0000 0100
    5 = 0000 0101
    6 = 0000 0110
    7 = 0000 0111
    8 = 0000 1000
    9 = 0000 1001

    ... и так далее. До 232 или даже до 264 - зависит от системы, 32- или 64-битной и языка программирования.

    Позиции битов считаются справа налево. Крайний правый бит имеет позицию 0. Позиция бита – это степень двойки. Если бит установлен в 1, надо прибавить 2 в степени этой позиции.

    Например, число 3 = 0000 0011 означает 20 + 21 = 1 + 2 = 3.

    Примечательно, что степени двойки – 0, 1, 2, 4, 8, 16, 32, 64, ... – выражаются всего одним включённым битом, одной единичкой, остальные биты – нули.

    Битовые маски – это договорённость, что каждый бит (каждая позиция) значит что-то определённое, что может быть включено или выключено, 1 или 0. Как линейка выключателей.

    Например, с разрешениями ВКонтакте:
    1 - бит 0 - notify
    2 - бит 1 - friends
    4 - бит 2 - photos
    8 - бит 3 - audio

    У ВК линейка длинная, состоит из 32 «выключателей».

    Допустим, вашему приложению требуются разрешения photos и audio – биты 2 и 3 надо установить в 1, остальные 0. Это можно сделать простым сложением: 22 + 23 = 4+8 = 12. В двоичной системе: 12 = 0000 0000 0000 1100

    Для удобства вычисления ВК прямо пишут значения, которые надо прибавить, чтобы получить нужную битовую маску – итоговое число, которое вы передадите в метод АПИ для запроса разрешения.

    Ещё один пример, вам требуется стена wall и offline доступ в любое время. Смотрите в таблице, какие там числа: wall (+8192) и offline (+65536). Значит, вам нужно просить разрешения для маски 73728
    Ответ написан
    Комментировать
  • Как понять методы в C#?

    Therapyx
    @Therapyx
    Data Science
    getName.ыыычто писать;
    getName - это функция со своим внутренним миром, которая тихоничко лежит и никого не трогает, пока ее не вызовешь. Как?
    getName() - если бы у тебя в скобах не было string name.
    public void getName (string name //вот это вот зачем мне?)

    то, что внутри скобок - это параметры, которые функция может использовать из вне.
    т.е. вызывая функцию в меине
    getName(name) ты передаешь в функцию переменную Name, которая находится в меине. Иначе к ней не будет доступа внутри той функции. Можно дописать хоть еще 20 штук: getName(name1,name2,name3....nameN) но и сама функция должна иметь такую же структуру на прием этих переменных

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

    Вопрос конечно не совсем корректен, интерфейс не обязателен.

    Вы просто в этом примере создаете интерфейс IPerson. Этот интерфейс могут по факту реализовывать сколько угодно классов. Например Person1, Person2, Person3. Все по своему.
    Теперь вам нужно сделать метод SpeakTo, который позволит вам поговорить с любым из этих классов. Окей, пишем дженерик и пишем ограничение на интерфейс. (where T : IPerson )
    Теперь в метод вы можете передать любой класс, реализующий интерфейс IPerson.

    Но вы также можете написать например класс PersonBase вместо интерфейса, унаследовать наши Person1, Person2, Person3 от базового класса. Тогда вам нужно будет написать ограничение не на интерфейс, а на базовый класс where T : PersonBase. И вы также сможете передавать в метод SpeakTo любой класс, унаследованный от PersonBase.
    public class PersonBase
    {
      public virtual string GetFirstName() {return "MY name is base"; }
      public virtual string GetLastName() { return "MY lastname is base"; }
    }
    
    //либо через абстрактный класс
    //public abstarct class PersonBase
    //{
    //  public abstract string GetFirstName();
    //  public abstract string GetLastName();
    //}
    
    class Speaker 
    {
      public void SpeakTo<T>(T person) where T : PersonBase
      {
        string name = person.GetFirstName();
        this.say("Hello, " + name);
      }
    }

    Еще бывают ограничения на конструктор, ограничения ссылочного типа и ограничения типа значения.
    Ответ написан
    Комментировать
  • Account account2 = account1 as Account; и Account account2 = (Account)account1; Есть различия?

    MikhailD
    @MikhailD
    Developer
    Различия есть:

    1. account1 as Account
    В этом случаи происходит приведение типа с проверкой. Если account1 не является типом Account, результат этого выражения будет null

    2. (Account) account1
    В этом случаи, если account1 не является типом Account, будет брошено исключение InvalidCastException

    В вашем случаи я рекомендовал бы такой вариант:
    Account account2 =  account1 as Account;
    if (account2 == null)
    {
        // account1 - это не Account
    }
    else
    {
        // account1 - это Account
    }
    Ответ написан
    Комментировать
  • Как проверить если ли возможно оставлять комментарий к записям пользователя?

    userfordownload
    @userfordownload
    За это отвечает wall.get и параметр items@.comments@.can_post;
    ce062e18d3fa4964b26b2c1567e1b992.JPG

    0 -нельзя.
    1- можно.

    var idgr = хххххххххх;
    var com=API.wall.get({owner_id:idgr});
    var b=com.items@.comments@.can_post;
    return b;

    1f28fa6e79b940268fecdb7a4cbe11b5.JPG
    Ответ написан
    4 комментария
  • Торрент-клиент успешно работает без announcer-а и за NAT'ом. Как?

    Jump
    @Jump
    Системный администратор со стажем.
    Как раздающие находят друг друга без трекера? (На ум ничего не приходит.)
    DHT, ну и вот тут можно прочитать
    Если на пальцах - клиент распределенной сети хранит информацию о торрентах и пирах, и обменивается ей с другими клиентами. Происходит что-то вроде поиска по базе данных, причем сама база данных размазана по тысячам клиентов, каждый из которых хранит только кусок БД.

    Как происходит раздача за NAT'ом без проброшенных портов?
    Очень просто.
    Вы из-за NAT открываете соединение к пиру, и он у вас по этому же соединению начинает качать.
    Разумеется раздача будет идти далеко не всем, чтобы можно было раздавать из за NAT'а нужно выполнить два условия -
    1)Вы сами инициируете соединение (поскольку к вам подключится нельзя)
    2)Тот пир к которому вы инициируете соединение должен сидеть не за NAT'ом, ну или у него должны быть проброшены порты.
    Ответ написан
    2 комментария
  • Как отменить реакцию фокуса в ListBox при нажатии на клавишу?

    @rFczZZ
    private void listBox1_KeyDown(object sender, KeyEventArgs e)
    {
        // для всех нужных сочетаний клавиш
        if (e.Modifiers == Keys.Control)
        {
            listBox1.Items[listBox1.SelectedIndex] = $"{listBox1.SelectedItem} !!!";
    
            // нужно установить флаг SuppressKeyPress, 
            // чтобы сообщение не обрабатывалось дальше
            e.SuppressKeyPress = true;
        }
    }
    Ответ написан
    1 комментарий
  • Как правильно заполнить List данными?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    var names = new[] { "n1", "n2", "n3" };
    var descriptions = new[] { "d1", "d2", "d3" };
    var companies = new[] { "c1", "c2", "c3" };
    var products = Enumerable.Range(0, names.Length-1)
                  .Select(i => new Product { Name = names[i], Description = descriptions[i], Company = companies[i]})
                  .ToList();

    Всё равно придётся создавать объект, в который нужно передать конкретное значение данных. Лучше циклом, имхо.
    Ответ написан
    Комментировать
  • Свитч раскладки клавиатуры с латиницы на русскую раскладку. Как?

    @S0HardCore
    1. Добавлять/отнимать смещение до символов другого языка в кодировке.
    Плюсы: намного меньше строк кода.
    Минусы: придется делать костыли для спец. символов; искать начало и конец букв в кодировке.

    2. Объявить словарь и заполнить его соответствиями символов в разных языках. В цикле сделать проход по словарю.
    Плюсы: код функции будет меньше; с какой-то стороны так даже правильнее, чем огромный switch.
    Минусы: все равно нужно объявлять каждую строку словаря.
    Ответ написан
    5 комментариев
  • Как можно разобрать такой вид json при помощи C#?

    @MonkAlex
    C#, SQL, Delphi, C++ etc
    Зачем что-то приводить?
    Берете к примеру jsonutils.com и кормите ему свой json.
    Он говорит, что это вполне валидный json и его можно парсить в лист таких вот классов:
    public class Example
        {
            public int id { get; set; }
            public string idnetrikalpu { get; set; }
            public string decription { get; set; }
            public string district { get; set; }
            public string externallpuid { get; set; }
            public bool isactive { get; set; }
            public string lpufullname { get; set; }
            public string lpushortname { get; set; }
        }


    Ну и, чтобы считать это всё :
    var fb = new WebClient() {Encoding = Encoding.UTF8}.DownloadString("http://91.237.82.1/api/v1/netrikalpu/?format=json");
          var list = JsonConvert.DeserializeObject<List<Example>>(fb);

    А уже из листа достаете что вам надо и куда надо.
    Ответ написан
    3 комментария
  • Почему форма не скрывается?

    tomnolane
    @tomnolane
    профессиональный разработчик
    в-первом случае - вы создаёте новый объект типа Form1 и его же скрываете. От сюда и эффекта ноль. Т.е. вы создали другой объект и его скрываете. Не главную форму...
    во-втором случае - происходит рекурсия - т.е. объект (типа Form1) создаёт сам себя по образу и подобию "оригинала", потом второй объект создаёт сам себя по образу "оригинала" и т.д., пока буффер памяти не переполнится.

    ОТВЕТ:
    Чтобы скрыть форму (текущую, в которой вы работаете) - достаточно
    this.Hide();
    Ответ написан
    Комментировать
  • На что годен компьютер с такими характеристиками?

    @Fixid Куратор тега Железо
    Оперативы до 8 добавить и хватит
    Ответ написан
    Комментировать
  • C# Ошибка с пространством имен?

    Вы должны представить пример полностью для разбора проблемы. А то мне пришлось добавлять недостающие. А так проверьте пространство имён. Возможно, вы просто не дописали K в подключении using.
    Ответ написан
    Комментировать