Ответы пользователя по тегу Программирование
  • Изучаю C# по видеукурсам - какая лучше литература?

    tomnolane
    @tomnolane
    профессиональный разработчик
    мои ответы, где (возможно) получите ответ на свой вопрос
    Нехватает знаний, язык c#?
    Если я пишу код на основе других, это плохо?
    и доп: тык


    Так вот, мне лучше сначала изучить книгу от Шилдта и смотря и учась программировать по видеурокам или сразу можно читать Троелсена?

    1) установить IDE (к примеру Visual Studio)
    2) смотреть видео уроки и тут же делать
    3) по любой книге - делать тоже самое, читаете и тут же в Visual Studio пробуете
    4) потом придумываете себе задачу (не глобальну, хотя бы создание калькулятора)- и пытаетесь сделать

    человек воспринимает лучше информацию, когда он: видит её (результат), может "пощупать"(сам своими ручками делает) и когда читает (всё вместе). Когда я начинал (только по книге Троелсена ) - не видя, не делая самим примеры в Visual Studio... т.е. только читая, а вообще что это такое и зачем оно надо... мой мозг сопротивлялся и не хотел запоминать полученную информацию. Что такое List или рефлексия?? Зачем? А когда стал смотреть видео курсы - я 1) понял, где это всё 2)как это выглядит 3) зачем это (почти понял)
    и потом снова стал читать книгу... и когда (наконец) 1-раз сел за visual studio и создал новый проект... я завис. Я не знал, что делать-то! Я всё забыл... боялся вообще что-то делать) хоть английский хорошо знаю - всё незнакомое, куча настроек, что нажимать...
    И пришлось пересматривать курсы заново.
    Так вот,
    1) смотрите курсы -тут же делаете в программе
    2) читаете книгу (время придёт, когда нужно будет) - тут же делаете в программе
    3) когда два пункта выполните - ставите задачу: как постить в ВК на стену (или фейсбук). Вводите в яндекс "постинг вконтакте c#", ищете код (или видеоурок) - копируете вставляете, получаете ошибку - и тратите кучу времени на доделывания (читаете документацию API ВК и там же регистрируетесь как разработчики), читаете про WebRequest и WebResponse, ага... получили ответ в виде json... "как распарсить json c#" - в яндекс, устанавливаете/скачиваете через Nuget библиотеку newtonsoft.json, и т.д. Чем чаще будете гуглить - тем быстрее "создатите" свой первый велосипед (пока не думайте о производительности или стилистике кода). Только так вы реально поймёте - как работать и с чем "это едят".

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

    tomnolane
    @tomnolane
    профессиональный разработчик
    в вашем случае, (лично я) использовал бы примерно так:
    Dictionary<string, string[]> wordDictionary = new Dictionary<string, string[]>();
    wordDictionary.Add("YANDEX", new string[] {'yandex1','yandex2'});
    wordDictionary.Add("GOOGLE", new string[] {'google1','google2'});


    или так

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApplication5
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<UserInfo> my_list = new List<UserInfo>();
    			my_list.Add(new UserInfo { name = "Вася", age = 19, male = true});
    			my_list.Add(new UserInfo { name = "Маша", age = 23, male = false});
    
                Dictionary<string, UserInfo> dic = new Dictionary<string, UserInfo>();
                dic.Add("YAndeX", my_list[0]);
                dic.Add("GooGle", my_list[1]);
    
                foreach (var temp in dic)
                {
                    Console.WriteLine("Key: " + temp.Key + " Value: Age" + temp.Value.age + " Name: " + temp.Value.name + " is male: " + temp.Value.male);
                }
                Console.ReadLine();
            }
        }
    
        class UserInfo
        {
            public string name { get; set; }
            public int age { get; set; }
            public bool male { get; set; }
        }
    }


    --------------------------------------------------------

    надеюсь вам поможет:
    1) массивы для знакомства
    2) кортеж
    3) класс Dictionary< TKey, TValue >
    using System;
    using System.Collections.Generic;
    
    namespace ConsoleApplication1
    {
        class UserInfo
        {
            // Метод, реализующий словарь
            public static Dictionary<int, string> MyDic(int i)
            {
                Dictionary<int, string> dic = new Dictionary<int,string>();
                Console.WriteLine("Введите имя сотрудника: \n");
                string s;
                for (int j = 0; j < i; j++)
                {
                    Console.Write("Name{0} --> ",j);
                    s = Console.ReadLine();
                    dic.Add(j, s);
                    Console.Clear();
                }
                return dic;
            }
        }
    
        class Program
        {
            static void Main()
            {
                Console.Write("Сколько сотрудников добавить? ");
                try
                {
                    int i = int.Parse(Console.ReadLine());
                    Dictionary<int, string> dic = UserInfo.MyDic(i);
    
                    // Получить коллекцию ключей
                    ICollection<int> keys = dic.Keys;
    
                    Console.WriteLine("База данных содержит: ");
                    foreach (int j in keys)
                        Console.WriteLine("ID -> {0}  Name -> {1}",j,dic[j]);
                }
                catch (FormatException)
                {
                    Console.WriteLine("Неверный ввод");
                }
    
                Console.ReadLine();
            }
        }
    }
    Ответ написан
    Комментировать
  • Как в c# в TextBox вывести текст с параметрами {0}?

    tomnolane
    @tomnolane
    профессиональный разработчик
    доп.
    в c# (версии 6) есть такая возможность (чтобы не цифры использовать):
    string bla = "первое слово";
    string bla2 = "второе слово";
    textBox1.Text = string.Format($"({bla}, {bla2})"); //знак $ нужен для того, чтобы сказать, что тут именованные переменные нужно брать
    Ответ написан
    Комментировать
  • Где найти примеры парсеров данных на C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • Как называется такая конструкция в C#?

    tomnolane
    @tomnolane
    профессиональный разработчик
    геттер (свойство).

    Оно позволяет возвращать объект типа Matrix под именем transform, который храниться в приватной "Области видимости". И это стандартная "тема".

    Допустим, есть объект который только хранит в себе что-то private string my_string = "что-то";
    он находится в области видимости "private" - т.е. доступен для использования только в рамках того класса, где он находится. В другом классе к нему (my_string) нельзя получить доступ и изменить. И в идеале так и нужно делать, чтобы созданные объекты были доступны только там, где надо, а не везде...
    далее создаём геттер (который только отдаёт значение объекта my_string, при этом сам в себе ничего не хранит (только ссылку),
    private string my_string = "что-то";
    public string My_String { get { return my_string ; } }

    его (My_String ) делают открытым (public) и позволяют безопасно получать данные из my_string;

    аналогично можно сделать сеттер, но ниже покажу самый распространённый:
    private string my_string = "что-то";
    public string My_String { get { return my_string ; } set { my_string  = value; }}

    в этом случае мы можем записывать (условно безопасно из другого класса к примеру) в my_string какие-то данные через My_String.

    всё это делается очень легко:
    //получить данные из my_string (get)
    var temp = My_String; 
    //записать/установить/изменить данные в my_string (set)
    My_String = "я тебя изменяю";  // в этом случае в  будет не my_string = "что-то", а my_string = "я тебя изменяю"
    Ответ написан
    1 комментарий
  • Чем отличаются ссылочные и знаковые типы?

    tomnolane
    @tomnolane
    профессиональный разработчик
    ЗнаЧимые типы хранят значение, а ссылочные - ссылку на значение. Не знаковые))
    class SSylka
    {
        public byte Value { get; set; }
    }
    
    struct Znachenie {
        public byte Value { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            SSylka _ssylka = new SSylka { Value = 0 };
            Znachenie _znachenie = new Znachenie { Value = 0 };
        }
    }

    В коде и _ssylka , и _znachenie создаются как локальные переменные метода Main на стеке. Переменная _znachenie содержит значение Value, а переменная _ssylka содержит ссылку на значение Value, хранящееся на куче.

    Для ссылочных типов - это куча, для значимых - это стек. При этом, ссылочная переменная (сама ссылка) храниться на стеке. Значимыми могут быть только экземпляры структур

    (int, double и т.д.) - это структуры

    Мы "создаем переменную с типом MyStruct"?

    Вы* создаёте экземпляр (не путать с ссылкой) переменной в стеке типа MyStruct

    Могу я в стек засунуть к примеру файл?

    Cтек (stack) — это контейнер, работающий по принципу "последний вошел, первый вышел" (last in, first out — LIFO).
    Этот класс создает динамическую коллекцию, которая расширяется по мере потребности хранить в ней вводимые элементы. Всякий раз, когда требуется расширить такую коллекцию, ее емкость увеличивается вдвое.
    Т.е. можно, но вот зачем? Оптимизированнее будет - если будет в куче, чтобы GC (сборщик мусора) удалил его тогда, когда не нужен будет.... а если файл будет изменяться? (увеличиваться/уменьшаться?).... и так каждый раз при увеличении он будет занимать не всё "пространство" выделенное для него...
    Ответ написан
  • Стоит ли читать старые книги по PHP?

    tomnolane
    @tomnolane
    профессиональный разработчик
    На практике - очень часто встречаются различные версии одного и того же языка... т.к. далеко не все успевают "перейти" на новую версию. (иногда переход занимает годы...)... и сейчас можно спокойно найти сайты где используется php версии 4.x, 5.x ... если прочтёте - плохо не будет - наоборот, вы подчеркнёте много информации, которая наверняка пригодится не раз. Всё запомнить не возможно - всяких "мелочей" очень много, и чем больше таких "мелочей" будете знать (особенно в разных версиях php), тем проще будет вам работать с любой задачей.
    п.с. на сколько я помню... сейчас современная версия php - 7
    п.с.с. на хостинге, который я использую, на возможность использовать версию php7 с php5.6 (с момента официального выхода php7) ушло примерно 5 месяцев, прежде, чем хостинг "обновил" конфигурацию своего сервера под php7.
    п.с.с.с. идеально правильный код - это "стиль" для данного языка, выработанный вами годами (через огромное кол-во своих ошибок) наработанным опытом и знаниями. По-этому, особо не стоит "заморачиваться" "правильностью", тем более php очень не типизированный язык и позволяет "кодить" очень гибко.
    п.с.с.с.с. php версии 6.x не существует
    Ответ написан
    Комментировать