• Какую литературу читать новичку по C#?

    @Beltoev
    Живу в своё удовольствие
    Можно начать с онлайн-руководства: metanit.com/sharp/tutorial

    А потом уже, чтобы закрепиться и углубиться, почитать Рихтера (CLR via C#)
    Ответ написан
    Комментировать
  • Как в массиве включить следующий элемент массива?

    @HiIamRobot
    Mass[i] - текущая песня. Менять значение i +/-1 при нажатии кнопки? Или я не так что-то понял..
    Ответ написан
    1 комментарий
  • Вопрос по классу-делегату и принимаемыми им параметрами?

    @atticus_finch
    Отвечая на ваш вопрос - это конкретный случай построения класса-делегата сообщенного с данным методом.
    Когда вы создаете класс-делегата (public delegate void MyDelegate();) вы указываете сигнатуру методов, которые потом можно сообщить с этим делегатом.
    Как пример вот вам делегат с принимаемыми параметрами и возвращаемым значение.
    public delegate int MyDelegate(int a, int b);
    Теперь вы можете сообщить с этим делегатом методы с такой же сигнатурой. Например
    public static int Sum(int a, int b)
            {
                return a+b;
            }

    Вызов делегата
    class Program
        {
            static void Main()
            {
                MyDelegate myDelegate = new MyDelegate(MyClass.Sum); 
                int result = myDelegate(5, 10);
            }
        }
    Ответ написан
    Комментировать
  • Какие есть ресурсы по .net?

    ImmortalCAT
    @ImmortalCAT
    C# loving
    metanit.com
    msdn.com
    Ответ написан
    Комментировать
  • Почему пишут вот так?

    @nirvimel
    Так делается для того, чтобы оставить за собой возможность впоследствии поменять реализацию не меняя интерфейс. Например, в будущем может потребоваться заменить реализацию ArrayList на LinkedList, если бы в качестве типа переменной был указан конкретный класс, то к тому времени код мог бы уже обрасти различными обращениями к, специфическим для конкретного класса, методами, выходящими за границы интерфейса List. В таком случае при замене реализации на LinkedList пришлось бы выискивать в коде и выкорчевывать оттуда все обращения к специфике ArrayList. На сколько это адски сложная задача знают все, кому приходилось работать над крупными проектами. Поэтому люди, знакомые с этой проблемой, предпочитают предупреждать подобные проблемы заранее, то есть во всех местах, где возможна смена реализации в будущем (то есть почти везде), стараются пользоваться исключительно интерфейсами, вместо того, чтобы опираться на конкретные реализации. В данном примере, если в качестве типа переменной был бы использован интерфейс List, то смена реализации ArrayList на LinkedList решалась бы заменой всего одной строки не зависимо от масштабов проекта.
    Ответ написан
    Комментировать
  • С чего начать свой путь(разработка под wp и win)?

    Maronus
    @Maronus
    Что выбрать?

    Другую платформу. Серьезно. Как WP разработчик ответственно заявляю — вакансий в данном направлении крайне мало, особенно на российском рынке.
    Если хочется C# и мобилки — изучай Xamarin.
    Если хочется C# и игры (в том числе мобильные) — Unity.
    Если хочется C# без мобилок и игр — ASP.NET и Enterprise направление.
    По всем трем пунктам спецы востребованы.

    Если все таки хочешь разрабатывать под WP, то 8,1 — единственная актуальная мобильная версия.
    UWP — позволяет создавать приложения под разные платформы (телефоны, десктопы, xbox и т.д.) с единым кодом, то есть значительно сократить время на разработку.

    Но пока не суйтесь в эти дебри. Начните с изучения базового синтаксиса C#. Хороших книг — валом. Большинство советуют "CLR via C#" Рихтера. Как только более менее освоитесь с самим языком (без графического интерфейса, просто консоль) — выбирайте одно из вышеперечисленных направлений и изучайте требуемый стек технологий.
    Ответ написан
    1 комментарий
  • Разработка под iOS для ASP.NET Developer?

    newross
    @newross
    Product owner
    Реально. На Pluralsight есть прекрасный курс по разработке приложений на Xamarin. А если пойдете по пути MVVM и сразу выделите бизнес-логику в отдельный проект, то потом будет очень просто реализовать и Android приложение.
    Ответ написан
    Комментировать
  • Почему долго загружается visual studio 2015 community?

    @Neonoviiwolf
    Flutter developer
    SSD
    Ответ написан
    Комментировать
  • Каким образом с технологией ASP.NET MVC соотносятся языки программирования С# и VB.NET?

    dmitry_pavlov
    @dmitry_pavlov
    World-class .NET freelance contractor (remotely)
    У веб приложения есть две части - клиентская и серверная. Клиентская - это веб страничка, которую пользователь видит в браузере. Серверная - это то, что генерирует на сервере эти странички, которые загружаются у пользователя на клиенте (в браузере).

    Клиентская часть - это HTML, CSS и JavaScript - то бишь те технологии, которые используются для создания обычных веб страниц. При этом на сервере могут быть использованы очень разные стеки технологий. В частности для стэка .NET - есть IIS (веб-сервер для хостинг-серверов на базе Windows), на котором работает ASP.NET (это веб фреймворк для генерации веб страниц) с использованием языка программирования С# или VB.NET.

    Пример другого стека на сервере: веб-сервер Apache (обычно на хостинг сервере на базе Linux), на котором работает скажем веб-фреймфорк CakePHP с использованием языка программирования PHP.

    Еще один пример: веб-сервер Passenger (на хостинг сервере под управлением операционок семейства Unix), на котором работает веб-фремворк Ruby on Rails, где разработку вы ведете на языке программирования Ruby.

    Есть подобные серверные комбинации для других языков программирования - Python, Java и тп.

    И если в случае .NET стэка (где один по сути производитель всего - и операционнки и веб сервера и веб фреймворка и языка программирования - это Майкрософт), то другие лптформы позволяют составлять больше комбинаций.

    Например, для языка программирования PHP есть много разных веб фреймворков. Для других языков - тоже. Даже для языков С# и VB.NET есть ASP.NET WebForms (раньше его наывали просто ASP.NET) и ASP.NET MVC (сюда же я бы отнес вариацию фреймворка для создания API - Web API). Для многиэ стэков есть много разных веб-серверов, веб-времворков и соответственно можно использовать много вариантов связок ОС - ВС - ВФ - ЯП

    На счет "Пишем сайт на VB.NET" это скорей всего значит - пишем на VB.NET веб приложение, которое будет использовать один из веб фремворков (либо ASP.NET WebForms либо ASP.NET MVC).

    Надеюсь, мне удалось внести ясность в терминологическую кашу, окружающую нас. К сожалению, даже в википедии я часто вижу эту кашу и кто-то начинает называть ASP.NET языком программирования. Это не так.
    Ответ написан
    7 комментариев
  • Разработка под iOS сильно отличается от разработки под Android?

    @four4
    Да.
    Ответ написан
    Комментировать
  • Есть ли смысл изучать WPF?

    WPF используется для UWP, знания не пропадут. Плюс недавно MS купили Xamarin, думаю скоро количество поддерживаемых платформ для UWP может резко возрости.
    Ответ написан
    Комментировать
  • Как собрать .NET приложение написанное на C# в Visual Studio в один exe файл?

    GavriKos
    @GavriKos
    Build->Build solution. В папке Debug/Release (зависит от сборки) будет exe файл.
    Или у вас какие то библиотеки и внешние зависимости есть?
    Ответ написан
    1 комментарий
  • Какая сейчас перспективная .Net технология по созданию Win Form приложений?

    newross
    @newross
    Product owner
    Смешались в кучу кони, люди.
    WinForms - это уже устаревшее API для разработки UI на .Net.
    WPF - современное API для того же дела.

    Дайте что ли определение своему "быть перспективным", а то непонятно, что вы вообще хотите получить.
    Как ни странно, но гугл в течение 0.05 секунды находит годную книгу по WPF.
    Ответ написан
    1 комментарий
  • С# для мобильной разработки?

    vawsan
    @vawsan
    Frontend Developer
    Нравится C# - развивайтесь в backend по ветке технологий от Microsoft. Там корпоративных систем и проектов много, без работы не останетесь. Но для фриланса не подходит, тут скорее офисно-корпоративное направление. На asp.net спрос хороший, особенно при его движении в правильном направлении последнее время.

    Нравится под мобилы - попробуйте Java, она очень похожа на C#, переход будет простым. Не понравится - оставите это дело. Xamarin интересная штука, но для своих целей. Шустрее натива все равно ничего нет.
    Ответ написан
    2 комментария
  • Как легче освоить внедрение зависимостей, code-first, TDD и паттерны?

    Valeriy1991
    @Valeriy1991
    Разработчик .NET C# (ASP.NET MVC) в Alfa-B, Moscow
    Добрый вечер! Спасибо за приглашение.
    На мой взгляд, Вам следует придерживаться следующих приоритетов по изучению:
    1. внедрение зависимостей более важно из Вашего списка, т.к. относится к SOLID принципам;
    2. TDD - на мой взгляд, вещь более нужная для изучения, чем code-first или patterns. Сам не так давно начал разрабатывать по TDD. Это очень здорово, что изобрели такой подход. Экономит тонну времени на ручное тестирование, а также дает быстрое понимание, что и где случайно (или неслучайно) сломалось. Главное - понимать, что покрывать тестами;
    3. третьим в список я бы добавил AngularJS или KnockoutJS или BackboneJS - сам пока что не изучил их и не начал применять, но судя по их популярности и преимуществам - думаю, Вам стоит с ними ознакомиться;
    4. code-first или database-first - не так уж и важно на Вашем этапе понимания. Главное отличие подхода Code-first: 1) модель пишется вручную, в связи с чем не нужно постоянно отслеживать edmx-диаграмму (т.е. можно считать, что Ваша code-first модель всегда находится в актуальном состоянии); 2) поддерживает миграции БД. В Database-first Вам нужно самому отслеживать актуальность состояния Вашей edmx-модели - с этим тоже могут быть проблемы. Опять же - только с опытом. С другой стороны, Database-first позволяет наглядно видеть Вашу модель, а вот Code-first - нет;
    5. паттернами тоже можете пока что голову не забивать. Безусловно, это нужно, но понимание их придет только с опытом (признаюсь честно: я сам не до конца все паттерны знаю и понимаю). На мой взгляд, важно соблюдать 1 основной паттерн - 3-уровневая архитектура (клиентский слой, слой бизнес-логики, слой работы с данными).

    Теперь по MVC.
    1. Model - тут, в принципе, всё просто: модель данных. Здесь можно поспорить, что иметь в виду под Моделью: модель самих данных или модель представления. Лично я после опыта работы с шаблоном MVVM в WPF под моделью данных в терминах ASP.NET MVC понимаю модель представления, а под термином "модель данных" - саму доменную модель (EF code-first, например). Кто-то может сказать, что это "лишняя работа" - по упаковыванию модели данных из EF-объектов в объекты модели представления. Да, частично соглашусь. Но зато это дает некую гарантию безопасности, что случайно пользователь не поменяет важную часть модели данных (например, ID).
    2. Контроллер. Основная задача контроллера - сформировать данные для отображения и передать эти данные в представление. Т.е. нужно стремиться к тому, чтобы код метода действия в контроллере содержал минимум кода. В идеале - вызов метода из слоя бизнес-логики и передача полученных данных в представление. Если Вы видите, что метод действия в контроллере содержит какую-то бизнес-логику, то это сигнал к рефакторингу: Ваш метод действия слишком много знает. По опыту могу добавить, что в среднем код метода действия содержит от 2 до 20-30 строк кода (с учетом того, что скобки { и } расположены на отдельных строках).
    3. Представление. Тут тоже всё просто: отобразить данные (из модели представления). Ни в коем случае нельзя в представлении писать логику по работе с самими данными, например, так делать нельзя:
    <div id="account">
        @{
            using(var db = new MyEfDbContext()
            {
                var userAccount = db.Accounts.FirstOrDefault(e => e.Username == User.Identity.Username);
                if(userAccount != null)
                {
                    @:Имя: @userAccount.Name
                    @:Фамилия: @userAccount.LastName
                }
            }
        }
    </div>


    Если у Вас 3-уровневая архитектура, например, есть слои:
    1. MyApp.MVC - MVC-application
    2. MyApp.BL - слой бизнес-логики
    3. MyApp.DAL - слой работы с данными
    то в представлении (View) вызывать напрямую сервисы бизнес-логики тоже нельзя, особенно, если Вы используете DI-принцип (внедрение зависимостей) и IoC контейнер. Т.е. такой пример недопустим:
    <div id="account">
        @{
            var accountService = new MyApp.BL.AccountService();
            var userAccount = accountService.GetUserAccountByUsername(User.Identity.Name);
            if(userAccount != null)
            {
                @:Имя: @userAccount.Name
                @:Фамилия: @userAccount.LastName
            }
        }
    </div>

    Попробую донести мысль архитектора и разработчика Александра Шевчука (преподавателя с http://itvdn.com): "Одна из главных целей при разработке - стремиться к упрощению системы". Ослабление зависимостей позволяет нам упрощать систему благодаря тому, что изменение осуществляется только на 1 каком-то слое/уровне. Если Вы во View вынесете логику по работе с данными, а уж тем более, как в примерах выше, работу с EF-контекстом, то Вы усилите зависимость одного компонента системы (MVC-слоя) от другого (слоя работы с данными или слоя бизнес-логики). Усиление зависимостей приводит к бОльшему числу изменений, что в свою очередь сказывается на повышении расходов на эту систему. Ослабление зависимостей приводит к меньшему числу изменений (например, при переходе от EF к native SQL или NHibernate затрагивается только слой работы с данными, а слой MVC и бизнес-логики не меняются), а значит, к более раннему выпуску системы или очередного релиза, и как следствие, снижение расходов (не только денежных, но и других ресурсов) на разработку. TDD тоже можно отнести к практикам, которые снижают затраты ресурсов на содержание системы. Но это я ушел в глобальное...

    Правильным будет подход, при котором у Вас снижается зависимость компонентов системы друг от друга, в случае с ASP.NET MVC приложением, на мой взгляд, это когда:
    - View знает о модели (я по прежнему буду иметь в виду модель представления - ViewModel, которые объявлены либо в MVC-слое, либо в слое бизнес-логики);
    - контроллер знает о слое бизнес-логики, обращается к нему за выполнением операций и получением ViewModel'ей, после чего передает во View полученную ViewModel (ну или JSON-данные);
    - Model формируется по принципу, грубо говоря, почти на каждую View своя модель.

    Фразу "правильным будет подход" я обосновываю тем, что у такого подхода есть масса плюсов (которые очевидны опытным разработчикам, но могут быть не до конца или неправильно поняты менее опытными коллегами, а именно):
    + View ничего не знает о доменной модели (только о ViewModel), благодаря чему Вы можете спокойно менять свою доменную модель, не внося изменений во View (см. выше про ослабление зависимостей и снижение количества связей). Также Вы спокойно можете перейти от EF к NHibernate или к native SQL, или использовать и то, и другое - View об этом никогда не узнает;
    + контроллер (да и весь MVC-слой) знает только о существовании слоя бизнес-логики, но ничего не знает о слое работы с данными.
    + если на View делать отдельную ViewModel, то это позволяет более полноценно управлять тем, что нужно показать пользователю. Т.е. дает возможность большего контроля отображаемых данных, повышает безопасность Вашего приложения (пользователь, например, не сможет изменить ID просматриваемой записи, если этого ID нет вообще в модели представления).

    Ну а вообще все зависит от задачи/проекта: нужно ли применять разбивку на слои или использовать ViewModel'и вместо обычных доменных моделей - надо думать над каждой ситуацией отдельно.

    P.S. На мой взгляд, литературу выбрали правильно - я тоже начинал изучение MVC с нее. Понравилась тем, что дается сначала общее описание и работа с ASP.NET MVC на сквозном примере. А потом идет более глубокое погружение в ASP.NET MVC. По разработке могу посоветовать блог Александра Бындю: blog.byndyu.ru Как мне кажется, там очень хорошо некоторые моменты разжевываются, в том числе SOLID, TDD, шаблон Repository, UnitOfWork и др.
    Ответ написан
    2 комментария
  • Как изучать параллельно две технологии?

    newross
    @newross
    Product owner
    Xamarin в руки и можно спокойно продолжать работать на .Net.
    Ответ написан
    4 комментария
  • Проблемы с изучением C# (разные операционные системы, сервера баз данных и версии фреймворка)?

    Nipheris
    @Nipheris Куратор тега C#
    Курсирует инфа, что программа написанная на VS 2015 не запуститься на XP и что под XP максимум NET 4.5 можно установить

    Не знаю, где она у вас там "курсирует", но под XP максимум устанавливается фреймворк 4.0. Это все на MSDN находится без проблем, тестируется на виртуалке для надежности.

    а современный 6-ой C# уже под версию 4.6

    Сейчас я вам фокус покажу. Создаем консольный проект на C#. Используем пару фич из C# 6.0:
    namespace ConsoleApplication1
    {
    	class A
    	{
    		public int Test { get; set; } = 0;
    	}
    
    	class Program
    	{
    		static void Main(string[] args)
    		{
    			Console.WriteLine(nameof(Main));
    		}
    	}
    }


    Далее ретаргетим проект на .Net Framework 2.0:
    67e06871538647a4a5e956d452298976.png
    Удаляем сборки и using-и, недоступные во втором фреймворке (для второго это LINQ и TPL).
    Компилим, запускаем, и радуемся.

    Выводы:
    1) под XP доступны все дотнеты до 4.0 включительно
    2) версия фреймворка определяет фичи, доступные в "стандартной библиотеке", а не фичи языка. Замечу, что в 4.0 есть и LINQ и Tasks;
    3) разрядность имеет значение, если ваша программа или зависимые библиотеки компилятся НЕ в AnyCPU. Иначе разницы нет.
    4) с SQL сервером вообще отдельная история, не знаю при чем тут вообще .Net. Это у вас наверное мнение такое о стеке MS, что у него все туго вместе завязано и не развязывается. Это не так. Меньше слушайте бестолковых коллег, больше читайте MSDN. Поверьте, после 3-х и более лет разработки под дотнет вы все вышеуказанное расскажете наизусть даже если вас разбудить в 3 часа ночи.

    корпоративное приложение тогда нужно использовать сервер БД в локальной сети

    конечно, Express версия это вам для примера, чтобы можно было создать и запустить, например, веб-приложение. Почитайте про ADO.NET, это подсистема работы с реляционными СУБД, и все поймете.
    Ответ написан
    2 комментария