Задать вопрос
  • Разница между virtual и abstract?

    @rare
    virtual предполагает наличие реализации, которую при необходимости/желании можно переопределить.
    abstract вы обязаны реализовать в неабстрактном классе. никакой реализации по умолчанию не предполагается.
    Ответ написан
    2 комментария
  • Перевызов событий?

    Nipheris
    @Nipheris Куратор тега C#
    Потому что ивент - это не то же самое, что делегат. Ивент ограничивает интефейс делегата только двумя операциями - добавить и удалить обработчик. Это делается для того, чтобы только изнутри объекта можно было сгенерировать событие. Иными словами, чтобы никто не мог, к примеру, "нажать" кнопку вместо самой кнопки (т.е. сгенерировать событие Clicked в обход внутренней логики класса "Кнопка"). В этом принципиальный смысл концепции событий.

    Можно провести аналогию между полем/свойством и делегатом/событием. Как свойство - это в некоторых случаях "интерфейс" для поля, который позволяет контроллировать, как оно изменяется (при этом вы можете использовать генерируемое поле с помощью синтаксиса { get; set; }), так и событие это "интерфейс" для делегата - вы не можете напрямую изменять или вызывать делегат, вы делаете это с помощью события. Можете также почитать про синтаксис add/remove у событий - тогда аналогия со свойством будет еще понятнее.

    Зачем делать InvokeEvent не совсем понятно, видимо это просто какой-то пример. В реальном коде класс MyClass должен сам решить, когда вызывать то или иное событие.
    Ответ написан
    5 комментариев
  • Вопрос о спецификации Generic UpCust/DownCust в Generic типах?

    Вот ответ на этот же вопрос от Эрика Липперта.
    Ответ написан
    Комментировать
  • Что означает эта строка?

    Nipheris
    @Nipheris Куратор тега C#
    default(T) вычисляется как дефолтовое значение для типа T.

    Given a variable t of a parameterized type T, the statement t = null is only valid if T is a reference type and t = 0 will only work for numeric value types but not for structs.The solution is to use the default keyword, which will return null for reference types and zero for numeric value types.For structs, it will return each member of the struct initialized to zero or null depending on whether they are value or reference types.
    Ответ написан
    Комментировать
  • Generic Типы и двойной UpCast?

    Nipheris
    @Nipheris Куратор тега C#
    Вы не совсем верно понимаете ковариантность в generic-интерфейсах и напутали в кучу много всего.

    Во-первых, тип поля figure ни на какой другой не меняется. Он не может измениться "на ходу", т.к. конкретный объект конкретного класса уже создан.

    Тип возвращаемого значения свойства Figure также не меняется.
    Еще раз повторюсь - у класса и у его экземпляра не меняются никакие типы ни полей, ни свойств.

    Вы почему-то воспринимаете приведение типа класса к интерфейсу как конвертацию значения объекта - как будто создастся другой Circle, у которого будут другие типы полей. Совершенно точно это не так.

    Когда речь идёт о ссылочных типах (а полиморфизм с использованием интерфейсов работает только с такими типами), то вам следует четко понимать, что вы работаете со ссылкой, и приведение типа для ссылки никак не может влиять на сам объект. Иными словами, вы просто меняете "окно", через которое смотрите на объект.

    Таким образом, ковариантность в случае интерфейсов - это вопрос исключительно типизации. Когда в C# добавили ко- и контрвариантность, фактически вам разрешили считать, что IContainer это частный случай IContainer, а раз так - то ВСЯКИЙ IContainer можно трактовать как IContainer. В ранних версиях языка этого нельзя было сделать - можно было только Container трактовать как IContainer.

    Если в ответе что-то непонятно, спрашивайте, т.к. по вашему вопросу создаётся ощущение, что у вас где-то большой пробел в понимании языка. Вы закапываетесь в детали, делая совершенно неверные предположения о происходящем.
    Ответ написан
    9 комментариев
  • Замена оперативной памяти?

    @VitGun
    посмотрите в спецификации на свою мат. плату. Если она поддерживает планки такого объема, то да.
    Ответ написан
    4 комментария
  • Generic Типы и UpCast к базовому интерфейсному типу(ковариантность обобщений)?

    WarFollowsMe
    @WarFollowsMe
    В C# при помощи интерфейсов реализуют важное свойство ООП - полиморфизм. Вкратце, это выделение одинаковых свойств и методов объектов, не привязываясь к их типу. Если простыми словами, то например у нас есть ряд объектов: стул, стол, чашка, грустный мопс и комета Чурюмова-Герасименко. И например стоит задача отслеживать их передвижение. Все объекты разных типов и привести их к одну общему не получается. В этом случае на помощь как раз и приходят интерфейсы. Описываем нужные нам свойства
    public interface INotifyCoordinateChanged
    {
        string Name{get;set;}
        double X{get;set;}
        double Y{get;set;}
        double Z{get;set;}
        event Action<INotifyCoordinateChanged> CoordinateChanged;
    }

    и если мы реализуем у всех объектов этот интерфейс, то теперь нам достаточно отслеживать изменения в списке
    List<INotifyCoordinateChanged> Objects{get;set;}
    P.S. А ваш пример очень странный. Интересно для объяснения какой темы его использовали. Просто это абсолютно бессмысленная солянка, пмсм.
    Ответ написан
    Комментировать
  • Годные курсы по unity c#?

    @VitGun
    Мне в свое время вот этот понравился. Но там прям совсем-совсем для новичков и только 2D
    Ответ написан
    1 комментарий
  • Ресурсы на русском из мира .net?

    Applez
    @Applez
    Разраб
    Настоятельно рекомендую подтянуть технический английский. Это не так сложно, а в развитии навыков поможет очень сильно.
    Ответ написан
    Комментировать
  • Какую литературу читать новичку по C#?

    Литература по языку C#

    Книги для новичков: а о чём это вообще?

    • Head First C#, Jennifer Greene, Andrew Stellman (русский перевод: Изучаем C#, Д. Грин, Э. Стиллмен). Содержит упражнения. Рекомендуется многими как хорошая книга для новичков.
    • Язык программирования C# 5.0 и платформа .NET 4.5 - Эндрю Троелсен. Популярная книга, многие начинали с неё.
    • C# 4.0: полное руководство, Герберт Шилдт. Несмотря на неоднозначное отношение к автору, книга пользуется популярностью.
    • C# 2010. Ускоренный курс для профессионалов, Нэш Трей
    Книги среднего уровня: если hello world не проблема
    • CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#, Джеффри Рихтер. Неувядающая классика. Хотите знать, что и как происходит на самом деле? Это книжка для вас. Не самое живое изложение, зато максимум подробностей из первых рук.
    • C# 6.0 in a Nutshell, Joseph Albahari, Ben Albahari (русский перевод предыдущей версии:C# 5.0. Справочник. Полное описание языка, Джозеф Албахари, Бен Албахари). Отличная книга, затрагивает многие аспекты, расставляет по местам ваши знания о предмете. Сводит разрозненные отрывочные знания в общую понятную картину, объясняет, какими средствами нужно пользоваться, а для чего есть уже более хорошие подходы. Есть online-глава о многопоточности (русский частичный перевод), почитайте!
    • Essential C# 5.0, Mark Michaelis в сооавторстве с Эриком Липпертом. Хорошая книга для программистов, желающих овладеть C#. Знания других языков, перед чтением, приветствуются. От Эрика Липперта в книге представлены продвинутые советы, которые встречаются на протяжении всей книги.
    • Effective C# и More Effective C#, Bill Wagner. О том, как надо и как не надо программировать на C#. Разбираются отдельные аспекты программирования, способствует углублению понимания языка.
    • Programming C# 5.0: Building Windows 8, Web, and Desktop Applications for the .NET 4.5 Framework, Ian Griffiths. (Русского перевода пока нет.) Очень детальная, подробная книга, в которой найдутся ответы на продвинутые вопросы.

    Книги для специалистов: внутренние механизмы и пыльные углы

    • C# in Depth, Jon Skeet, Third Edition (русский перевод: C#. Программирование для профессионалов, Джон Скит, пока переведено лишь второе издание). Имя автораговорит само за себя. Джон один из лучших людей, которые умеют доходчиво объяснять сложные вещи.
    • C# 5 Unleashed, Барт де Смет. Фундаментальная книга.
    • Debugging Microsoft .NET 2.0 Applications, John Robbins (русский перевод: Отладка приложений для Microsoft .NET, Джон Роббинс). Основы промышленной отладки: WinDbg/SOS, дампы памяти и решение проблем в приложениях (почти) без Visual Studio.
    • Under the Hood of .NET Memory Management, Chris Farrell, Nick Harrison. Полное описание всех тонкостей управления памятью в платформе .NET. Книга доступнабесплатно на английском.
    • Expert .NET 2.0 IL Assembler, Serge Lidin. В книге представлены ответы почти на все тонкости низкоуровневого программирования на .NET, а именно на языке IL. В книге описаны детали .NET Framework 2.0, по этому на данный момент какие то аспекты могут быть не актуальны.
    • Оптимизация приложений на платформе .NET с использованием языка C#, Саша Голдштейн, Дима Зурбалев, Идо Флатов (Переводчик: Александр Киселев). В книге рассматривается моменты .NET с точки зрения производительности. Рассказывается об способах замеров и шаблонах оптимизации. Также там рассматриваются вопросы, связанные с GC и небезопасным кодом.

    Дополнительные ресурсы:

    • Официальная спецификация C# 5
    • Framework Design Guidelines. Руководства и соглашения по проектированию многократно используемого кода. Является выдержкой из одноимённой книги, Krzysztof Cwalina, Brad Abrams. Книга переведена на русский под названием Инфраструктура программных проектов, Кржиштоф Цвалина, Брэд Абрамс.

    Литература по асинхронному программированию и многопоточности

    • Concurrent Programming on Windows, Joe Duffy. Профессиональное использование многопоточности в инфраструктуре .NET от одного из лучших мировых специалистов по многопоточности. В книги описаны тонкости использования как stream'oв так и thread'ов. Раскрыто, как и когда использовать Concurrent-, Parallel- и Asynchronous-модели. Примеры в книге присутствуют от достаточно низкоуровневых (с использованием системных потоков через WinAPI) до высокоуровневых Task'ов и PLINQ. Книга написана под .NET Framework 4.0, поэтому работа с ключевыми словами async/await в книгу не вошла.
    • Concurrency in C# Cookbook, Stephen Cleary. (Русского перевода пока нет.) Очень толковое разъяснение современных паттернов использования многопоточности, особое внимание уделено использованию конструкции async/await. Обсуждается решение типичных проблем, решаемых асинхронным кодом. Отдельно описывается работа с Reactive Extensions и TPL Dataflow.

    Литература по WPF
    • Pro WPF 4.5 in C#: Windows Presentation Foundation in .NET 4.5, Matthew MacDonald (русский перевод: WPF: Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов, Мэтью Макдональд). Разбор XAML'а, лаконичные, но полезные примеры. Пристальное, но не навязчивое внимание к деталям.
    • Windows Presentation Foundation Unleashed, Adam Nathan. Наверное, лучшая книга для новичка.
    • Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation, Чарльз Петцольд. Фундаментальная книга великолепного специалиста. Написана довольно тяжело, много листингов, плотный поток информации

    Литература по ASP.NET
    • Pro ASP.NET MVC 5, Adam Freeman (русский перевод: ASP.NET MVC 5 с примерами на C# 5.0 для профессионалов, Адам Фримен). Поэтапное написание веб-приложения с рассмотрением большинства важных аспектов разработки приложения: паттерн MVC, юнит-тестирование, инверсия зависимостей и т. п.
    • Pro ASP.NET 4.5 in C#, Adam Freeman (русский перевод: ASP.NET 4.5 с примерами на C# 5.0 для профессионалов, Адам Фримен).
    • Professional ASP.NET MVC 5, Jon Galloway, Phil Haack, Brad Wilson, K. Scott Allen
    • Programming ASP.NET MVC 4: Developing Real-World Web Applications with ASP.NET MVC, Jess Chadwick, Todd Snyder, Hrusikesh Panda (русский перевод: ASP.NET MVC 4. Разработка реальных веб-приложений с помощью ASP.NET MVC, Джесс Чедвик, Хришикеш Панда, Тодд Снайдер).
    • ASP.NET MVC Framework, Гайдар Магдануров, Владимир Юнев
    • Pro ASP.NET MVC 2 Framework, Steven Sanderson (русский перевод: ASP.NET MVC Framework с примерами на C# для профессионалов, Стивен Сандерсон)
    Дополнительные ресурсы:
    • Get Started with ASP.NET от Microsoft
    • Видеокурсы на intuit.ru: Разработка веб-приложений на ASP.NET, Разработка веб-приложений с использованием ASP.NET MVC Framework.

    Литература по LINQ
    • Pro LINQ: Language Integrated Query in C# 2010, Joseph Rattz, Adam Freeman (русский перевод: LINQ. Язык интегрированных запросов в C# 2010 для профессионалов, Адам Фримен, Джозеф С. Раттц). Учебно-справочное пособие, в котором понятно и подробно описаны возможности языка LINQ. Хороша для старта.
    • LINQ Pocket Reference, Joseph Albahari, Ben Albahari (русский перевод: LINQ. Карманный справочник, Джозеф Албахари, Бен Албахари). Хороший справочник по всему, что относится к LINQ. Рассмотрены новые конструкции C# для поддержки LINQ. Много примеров.
    • C# in Depth, Jon Skeet (русский перевод: C#. Программирование для профессионалов, Джон Скит). Немалая часть книги посвящена тому, как работает LINQ.

    Литература по принципам, шаблонам и методикам разработки
    • Внедрение зависимостей в .NET, Марк Симан. Несложно написанная книга про управление зависимостями в приложениях.
    • Принципы, паттерны и методики гибкой разработки на языке C#, Роберт С. Мартин, Мика Мартин

    Литература по Windows Workflow Foundation
    • Essential Windows Workflow Foundation, Dharma Shukla, Bob Schmidt (русский перевод:Основы Windows Workflow Foundation, Дхарма Шукла, Боб Шмидт). Для тех, кого заинтересовала 26 глава («Введение в Windows Workflow Foundation») из книги Эндрю Троелсена Язык программирования C# 5.0 и платформа .NET 4.5.
    • Pro WF 4.5, Bayer White (русской версии нет). Более углубленный взгляд на WF.

    Литература по XML
    • XML.NET, Джо Грей, Динар Дальви, Бипин Джоши, Фредрик Нормен, Фрэнсис Нортон, Энди Ольсен, Дж. Майкл Палермо IV, Даршан Сингх, Джон Слэйтер, Кевин Уильямс (Переводчик: И. Штерев). В книги содержится всё про применение XML в .NET за исключением LINQ. Старовата уже, но зато там есть объяснение, как внедрить свои функции на C# в XSLT.

    Литература по ADO.NET
    • Основы ADO.NET, Боб Бошемин (Переводчики: О.А. Лещинский, А.В. Журавлев, Н.Н. Селина)

    Литература по .NET Remoting / WCF
    • Microsoft .NET Remoting, Скотт Маклин, Джеймс Нафтел, Ким Уильямс
    • Создание служб WCF, Джувел Леве (Переводчики: Е. Матвеев, А. Пасечник)

    Литература по безопасности
    • Криптография и безопасность в технологии .NET, Питер Торстейнсон, Гнана Ганеш (Переводчик: В. Хорев). Книга дает представление .NET разработчику о реализации и применении криптографии, цифровой подписи, аутентификации, авторизации и доступа к коду (CAS). В ней описывается, что такое симметричное и асимметричное шифрование, что представляют собой цифровые подписи и как их использовать в .NET приложениях.
    • Microsoft ASP.NET. Обеспечение безопасности, Доминик Байер. Не смотря на то, что в названии указано ASP.NET в книге рассматриваются технологии безопасности под Windows, применимые из .NET для всех типов приложений. Это аутентификация, авторизация, олицетворение и Membership.
    Ответ написан
    5 комментариев
  • Для этого ли нужны делегаты?

    arusef
    @arusef
    Novice .NET dev
    Нет, это не жизненный пример. Это вообще очень странный пример, и никто в здравом уме не будет вызывать нестатический метод на имени типа. В данном случае расово верным и единственным рациональным решением было бы обратиться к этому методу, как var ret = instance.Method("string");.

    Однако, возвращаясь, собственно, к теме самих делегатов и их жизненного применения. Самым классическим примером была бы реализация функции Where (которая поставляется в LINQ).
    // in static class
    IEnumerable<TElement> Where(this IEnumerable<TElement> source, Predicate<TElement> filter){
       // для простоты опустим проверки и т.д.
       foreach(TElement elem in source)
          if(filter(elem)) yield return elem;
    }
    // ... usage ...
    var list = new List<int> { 1, 2, 3, 4, 5, 6 };
    var ret = list.Where(elem => elem % 2 == 0);
    foreach(int e in ret)
       Console.Write(e + " ");
    // ...

    В данном случае функция перебирает каждый элемент в перечислении source, вызывает функцию filter (функция, которая принимает значение типа TElement и возвращает bool), и возвращает текущий элемент, если возвращённое filter значение было true.
    После выполнения фрагмента кода, на экран было бы выведено "2 4 6 ".
    Ответ написан
    Комментировать
  • Для этого ли нужны делегаты?

    Nipheris
    @Nipheris Куратор тега C#
    Делегаты - это реализация функтора на платформе .net. Функтор - это распространенная в современных языках базовая концепция, пришедшая из функционального программирования. Коротко её смысл в том, чтобы работать с функцией как со значением, наравне со значениями других, более привычных типов, вроде int или double. Т.е. функцию можно передавать в другие функции, возвращать из функций и так далее. В функциональных языках это обычное дело, однако и в императивных языках это даёт массу возможностей.

    Количество применений делегатов в дотнете вообще и конкретно в C# огромно. Собственно, сам язык сегодня является частично функциональным из-за того, что широко используются делегаты и основанные на них возможности. Любая лямбда может быть скомпилирована в делегат. LINQ to Objects основаны на делегатах. События есть инкапсулированные делегаты. Любые callback-и в дотнете это делегаты. Список можно продолжать

    Сравнивая C# с другими языками, делегаты часто называют "умными указателями на функции" в том смысле, что они похожи на указатели на функции в Си, но умеют еще и запоминать объект, для которого требуется вызвать метод, если метод нестатический. А вот в C++ есть прямой их аналог - это std::function.

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

    Sterhel
    @Sterhel
    https://habrahabr.ru/all/ - вообще все по времени публикации.
    https://habrahabr.ru/feed/ - по подписке
    Ответ написан
    Комментировать
  • Делегаты и их экземпляры?

    @Hydro
    C#/.NET Developer
    Да, все так.
    И многие ситуации уже покрываются встроенными делегатами Func и Action и их перегрузками
    Ответ написан
    Комментировать
  • Делегаты и их экземпляры?

    @dmitryKovalskiy
    программист средней руки
    Да, примерно вы все правильно поняли. Для методов с идентичной сигнатурой хватит одного делегата, для метода с другой сигнатурой - требуется другой делегат.
    Ответ написан
    Комментировать
  • Вопрос по классу-делегату и принимаемыми им параметрами?

    @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);
            }
        }
    Ответ написан
    Комментировать
  • Перечисления. Метод GetValue в цикле?

    @BernadetteWolowitz
    C# developer
    Массив создается как одномерный. Не важно, что он содержит: int или EnumType или BigObjectWithManyProperties.
    Ответ написан
    Комментировать
  • Материал для изучения?

    @balamut108
    Py
    Мне нравятся книги А.Шеня, он просто гений. Всё бесплатно тут: www.mccme.ru/free-books

    Также есть отличный курс от замечательного преподавателя и просто хорошего человека Александра Куликова на stepic.org (алгоритмы и структуры данных). Опять же всё бесплатно!
    Ответ написан
    Комментировать
  • Материал для изучения?

    @evgeniy_lm
    Читай книгу "Конкретная математика". Это упрощенный аналог для школьников книги "Искусство программирования"
    Ответ написан
    1 комментарий
  • Материал для изучения?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://www.youtube.com/user/TPMGTU/ ненужное сам выкинешь, но у этих ребят ролики в целом божеские для понимания

    в этом канале почти все не по теме, что просишь
    https://www.youtube.com/user/CBSystematicsTV/videos
    но то что по теме (алгоритмы там, паттерны) поищещь потом на форумах, подача материала грамотная, но посложнее предыдущего

    и можно тут https://stepic.org/explore/courses тоже посмотреть алгоритмы (рассказывает и получше, и похуже предыдущего) и кучу к чему душа лежит

    скачиваешь ставишь скорость на 1,3-1,5 и вперед
    Ответ написан
    Комментировать