C# — Помогите чайнику

Содержание

C# для чайников. Ведь это так просто! (2020)

Эта книга поможет вам быстро и безболезненно освоить новейшую версию C# . Вы научитесь создавать приложения для Windows, использовать графику, потоки, контейнеры, базы данных и многое другое, узнаете, что такое .NET Framework, полиморфизм, наследование и обобщенное программирование, а также изучите множество других важных и интересных вещей.

Год: 2020
Автор: Джон Пол Мюллер
Жанр: Программирование
Формат: DjVu,PDF
Качество: Изначально электронное (ebook)
Язык: Русский
Страниц 609 с ил.
Размер: 61.6 Мб

Стань мастером C#: подборка книг по языку родом из Microsoft

C# — объектно-ориентированный язык программирования, созданный в 1998–2001 годах компанией Microsoft как язык разработки приложений для платформы Microsoft .NET Framework. Он совмещает в себе силу и гибкость C++ с простотой Visual Basic.

C#, конечно же, уступает по популярности таким языкам, как C, Java, C++ и PHP, но, несмотря на это, он используется довольно часто. Ниже вы найдёте подборку книг, которые помогут вам в изучении этого языка программирования.

C# Programming Yellow Book

Эта книга — пособие для первокурсников на факультете компьютерных наук университета Халла. Вот рассматриваемые темы:

  1. Компьютеры и программы. Вы узнаете, что такое компьютер, как работают программы и как их писать. В конце раздела начнётся знакомство с самим C#.
  2. Обработка данных. В этой главе разбирается написание простой программы.
  3. Создание программ. Вы научитесь разбивать программы на отдельные части и использовать массивы.
  4. Создание решений. Здесь рассматривается процесс создания сложного проекта.
  5. Продвинутое программирование. Заканчивается книга разбором более сложных и мощных возможностей C#.

Для скачивания также доступны и другие материалы учебного курса.

Fundamentals of Computer Programming with C#

Данная книга предназначена для новичков. Она учит вас мыслить как программист, а C# в данном случае — просто инструмент, который можно заменить на Java, C++, PHP или Python. Это книга о программировании, а не о C#.

Она была написана командой болгарских разработчиков, затем её перевели на английский.

Изучаем C#

C# спроектирован и разработан специально для применения с .NET Framework — он идеально подходит для создания мощных Windows-приложений.

Прочитав эту книгу, вы освоите не только C# и .NET, но и XAML, Visual Studio и даже программирование под Windows Phone.

C# 7.0. Карманный справочник

Вам никогда не хотелось иметь всегда под рукой книгу, в которой можно быстро найти ответ по той или иной особенности языка? Для C#-программистов такая книга уже существует — «C# 7.0. Карманный справочник». Это наиболее актуальная версия книги, охватывающая стандарт C# 7.0. Кроме того, книга также подойдет для опытных программистов, пишущих на Си, C++ или Java и желающих освоить в сжатые сроки новый для себя язык как для саморазвития, так и для использования в существующем проекте.

Принципы, паттерны и методики гибкой разработки на языке C#

Авторы Роберт и Мика Мартины собрал в этой книге множество методов гибкой разработки, а также продемонстрировали на примерах их работоспособность. Применяя объектно-ориентированный подход, авторы рассматривают конкретные паттерны, применяемые к проектированию приложений, описывают методы рефакторинга и способы эффективного использования различных видов UML-диаграмм.

Microsoft Visual C#. Подробное руководство

Данная книга наиболее полно охватывает все возможности языка C#. Кроме того, она сертифицирована Microsoft. В ней много материала по работе с переменными, операторами, выражениями и методами, разработке надежных приложений с обработкой ошибок и исключений, использованию коллекции, созданию запросов LINQ и основам объектно-ориентированного программирования.

В 8 издании рассматривается стандарт C# 6.0 и среда разработки Visual Studio 2015. Книга ориентирована на тех, кто уже знает хотя бы один из языков программирования, но желающих знать C#, а также на программистов, уже знакомых с C# и желающих углубить свои знания в разработке приложений.

Разработка обслуживаемых программ на языке C#

В книге содержится 10 рекомендаций по разработке легко поддерживаемых и адаптируемых программ. Данные советы были выработаны авторами книги путем анализа сотен функционирующих систем. У этой книги также имеется версия для языка Java. Руководство будет полезно тем, кто стремится написать качественный код, который смогут в дальнейшем читать и поддерживать другие программисты.

C# Programming

Эта книга подробно описывает возможности языка C#. Рассматриваются основы языка, классы, продвинутые концепции, фреймворк .NET и ключевые слова.

В изучении C# вам также поможет этот русскоязычный видеокурс.

Creating Mobile Apps with Xamarin.Forms

Эта книга рассказывает о создании кроссплатформенных мобильных приложений при помощи Xamarin.Forms. Рассматриваются такие темы, как анимация, MVVM, триггеры, поведения, макеты и рендеры.

The Daily Design Pattern

В этой книге вы найдете подробный анализ 22 популярных паттернов проектирования и их реализации на C#.

Также советуем обратить внимание на серию видеоуроков по этой же теме.

Threading in C#

Это подробное руководство познакомит вас с возможностями работы с потоками в C#. Кстати, доступна и версия на русском языке.

Introduction to programming and the C# language

Эта книга — практическое введение в C#. В ней на простых примерах объясняются все основные концепции ООП. Цель книги — научить вас разрабатывать полноценные приложения и помочь выбрать дальнейшее направление развития.

Кстати, для изучения ООП вам может пригодиться и этот русскоязычный видеокурс.

Object Oriented Programming using C#

В этой книге при помощи небольших упражнений объясняется объектно-ориентированный подход к программированию. Кульминацией является написание большой программы. Затрагиваются следующие темы:

  • абстракция;
  • наследование;
  • полиморфизм;
  • ООП;
  • UML;
  • agile;
  • разработка через тестирование.

Object-Oriented Programming in C# Succinctly

Эта книга познакомит вас с основами объектно-ориентированного программирования. В ней достаточно как теории, так и практических примеров. Вот разделы книги:

  1. Три столпа ООП.
  2. Интерфейсы.
  3. SOLID.
  4. Шаблоны проектирования.
  5. Шаблоны GRASP.
  6. Архитектура.
  7. Другие парадигмы.

C# Code Contracts Succinctly

Контрактное программирование — это метод проектирования ПО, предполагающий, что проектировщик должен определить формальные, точные и верифицируемые спецификации интерфейсов для компонентов системы. В C# такой подход реализуется при помощи библиотеки Code Contracts, об использовании которой и рассказывает эта книга. Вот её оглавление:

  1. Вступление.
  2. Использование контрактов для кода.
  3. Полезные советы.
  4. Тестирование контрактов для кода.
  5. Расширения контрактов для кода.
  6. Заключение.
  7. Полезные ресурсы.

Data Capture and Extraction with C# Succinctly

Обнаружение и извлечение информации — это одна из самых сложных задач, поэтому для её решения стоит пользоваться специальными инструментами. Эта книга расскажет вам, как извлекать данные из электронных писем, скриншотов, сайтов и текстов при помощи языка C#.

Если вы знаете другие бесплатные книги по C#, которые стоит добавить в нашу подборку, делитесь ими в комментариях!

Hello World — интерактивный учебник по основам C# Hello World — Introduction to C# interactive C# tutorial

Это руководство поможет в интерактивном изучении C#. С помощью браузера вы напишете код C# и сможете просмотреть результаты его компиляции и выполнения. This tutorial teaches you C# interactively, using your browser to write C# and see the results of compiling and running your code. Руководство содержит ряд задач, первой из которых будет написание программы Hello World. It contains a series of lessons that begin with a «Hello World» program. В рамках этих занятий вы ознакомитесь с основами языка C#. These lessons teach you the fundamentals of the C# language.

Запуск первой программы C# Run your first C# program

  • Осталось: 28 мин

Запустите приведенный ниже код в интерактивном окне. Run the following code in the interactive window. Для этого введите следующий блок кода в интерактивном окне и нажмите кнопку Выполнить: To do that, type the following code block in the interactive window and click the Run button:

Поздравляем! Congratulations! Вы запустили первую программу C#. You’ve run your first C# program. Это простая программа, которая выводит сообщение «Hello World!». It’s a simple program that prints the message «Hello World!». Для вывода используется метод Console.WriteLine. It used the Console.WriteLine method to print that message. Console — это тип, который представляет окно консоли. Console is a type that represents the console window. WriteLine — это метод типа Console , который выводит строку текста в текстовой консоли. WriteLine is a method of the Console type that prints a line of text to that text console.

Продолжим изучение. Let’s move on and explore more. Далее в этом уроке рассматривается работа с типом string , который представляет текст на языке C#. The rest of this lesson explores working with the string type, which represents text in C#. Как и для типа Console , для типа string используются методы. Like the Console type, the string type has methods. Методы string работают с текстом. The string methods work with text.

Этот онлайн-интерфейс для написания кода находится на этапе предварительной версии. This online coding experience is in preview mode. При возникновении проблем сообщите о них на странице репозитория dotnet/try. If you encounter problems, please report them on the dotnet/try repo.

Объявление и использование переменных Declare and use variables

  • Осталось: 26 мин

При помощи вашей первой программы на экран выводится string Your first program printed the string «Hello World!» «Hello World!». on the screen.

Вероятнее всего, при изучении C# (как и любого другого языка программирования) вы будете допускать ошибки в коде. As you explore C# (or any programming language), you’ll make mistakes when you write code. Компилятор найдет эти ошибки и сообщит вам о них. The compiler will find those errors and report them to you. Если результат содержит сообщения об ошибках, внимательно просмотрите пример кода и код в интерактивном окне, чтобы понять, что нужно исправить. When the output contains error messages, look closely at the example code, and the code in the interactive window to see what to fix. Это упражнение поможет вам изучить структуру кода C#. That exercise will help you learn the structure of C# code.

Функции первой программы ограничиваются выводом одного сообщения. Your first program is limited to printing one message. Вы можете создавать более полезные программы с использованием переменных. You can write more useful programs by using variables. Переменная — это символ, который вы можете использовать для выполнения одного и того же кода с разными значениями. A variable is a symbol you can use to run the same code with different values. Попробуем сделать это. Let’s try it! Замените код, написанный в интерактивном окне, следующим: Replace the code you’ve written in the interactive window with the following code:

В первой строке объявляется переменная aFriend и ей назначается значение Bill. The first line declares a variable, aFriend and assigns it a value, «Bill». Вторая строка выводит имя. The second line prints out the name.

Любой объявляемой переменной можно присваивать разные значения. You can assign different values to any variable you declare. Можно назначить переменной имя одного из ваших друзей. You can change the name to one of your friends. Добавьте эти две строки в интерактивном окне после кода, который вы уже добавили: Add these two lines in the interactive window following the code you’ve already added:

Обратите внимание, что при помощи одной и той же строки кода выводятся два разных сообщения. Они формируются на основе значения, которое хранится в переменной aFriend . Notice that the same line of code prints two different messages, based on the value stored in the aFriend variable.

Как вы могли заметить, слово Hello в двух последних сообщениях отсутствует. You may have also noticed that the word «Hello» was missing in the last two messages. Исправим это. Let’s fix that now. Измените строки, которые выводят сообщение, следующим образом: Modify the lines that print the message to the following:

Снова нажмите кнопку Выполнить, чтобы просмотреть результаты. Click Run again to see the results.

Вы уже использовали + для создания строк из переменных и констант. You’ve been using + to build strings from variables and constant strings. Но есть способ лучше. There’s a better way. Вы можете поместить переменную между символами < и >, чтобы код C# заменял этот текст значением переменной. You can place a variable between < and >characters to tell C# to replace that text with the value of the variable.

Если добавить $ перед открывающей кавычкой строки, то внутри строки можно включать переменные в фигурных скобках, например aFriend . If you add a $ before the opening quote of the string, you can then include variables, like aFriend , inside the string between curly braces. Попробуйте! Give it a try:

Снова нажмите кнопку Выполнить, чтобы просмотреть результаты. Click Run again to see the results. Вместо «Hello » будет выведено сообщение «Hello Maira». Instead of «Hello «, the message should be «Hello Maira».

Этот онлайн-интерфейс для написания кода находится на этапе предварительной версии. This online coding experience is in preview mode. При возникновении проблем сообщите о них на странице репозитория dotnet/try. If you encounter problems, please report them on the dotnet/try repo.

Работа со строками Work with strings

  • Осталось: 23 мин

Когда вы вносили последние изменения, вы ознакомились с возможностями работы со строками. Your last edit was our first look at what you can do with strings. Рассмотрим их подробнее. Let’s explore more.

Между фигурными скобками можно указать более одной переменной. You’re not limited to a single variable between the curly braces. Попробуйте выполнить следующий код: Try this:

Изучая работу со строками, вы быстро поймете, что это не просто наборы букв. As you explore more with strings, you’ll find that strings are more than a collection of letters. Длину строки можно узнать с помощью Length . You can find the length of a string using Length . Length — это свойство строки, которое возвращает количество содержащихся в ней символов. Length is a property of a string and it returns the number of characters in that string. Добавьте следующий код в нижней части интерактивного окна: Add the following code at the bottom of the interactive window:

Цукерберг рекомендует:  Си программирование - Помогите пожалуйста Cи

Теперь вы можете попрактиковаться самостоятельно. This is a good time to explore on your own. Вы узнали, что Console.WriteLine() выводит текст на экран. You’ve learned that Console.WriteLine() writes text to the screen. Вы научились объявлять переменные и объединять строки. You’ve learned how to declare variables and concatenate strings together. Поэкспериментируйте с интерактивным окном. Experiment in the interactive window. В этом окне есть интересная функция IntelliSense, которая предлагает доступные варианты действий. The window has a feature called IntelliSense that makes suggestions for what you can do. Введите . после d в firstFriend . Type a . after the d in firstFriend . Вы увидите список рекомендаций с доступными свойствами и методами. You’ll see a list of suggestions for properties and methods you can use.

Этот онлайн-интерфейс для написания кода находится на этапе предварительной версии. This online coding experience is in preview mode. При возникновении проблем сообщите о них на странице репозитория dotnet/try. If you encounter problems, please report them on the dotnet/try repo.

Другие действия со строками Do more with strings

  • Осталось: 18 мин

Вы уже использовали метод (Console.WriteLine) для вывода сообщений. You’ve been using a method, Console.WriteLine, to print messages. Метод — это блок кода, который реализует какое-либо действие. A method is a block of code that implements some action. Ему присваивается имя, чтобы вы могли получить к нему доступ. It has a name, so you can access it.

Предположим, что строки содержат начальные или конечные пробелы, которые не нужно отображать. Suppose your strings have leading or trailing spaces that you don’t want to display. Вам нужно обрезать эти лишние пробелы. You want to trim the spaces from the strings. Эту задачу выполняют метод Trim и связанные с ним методы TrimStart и TrimEnd. The Trim method and related methods TrimStart and TrimEnd do that work. Они просто удаляют из строки начальные и (или) конечные пробелы. You can just use those methods to remove leading and trailing spaces. Попробуйте выполнить код ниже: Try the following code:

В этом примере демонстрируются важные принципы работы со строками. This sample reinforces a couple of important concepts for working with strings. Методы управления строками возвращают новые строковые объекты, а не вносят изменения в существующие. The methods that manipulate strings return new string objects rather than making modifications in place. Как видите, каждый вызов любого из методов Trim возвращает новую строку, а не изменяет исходное сообщение. You can see that each call to any of the Trim methods returns a new string but doesn’t change the original message.

Доступны и другие методы для работы со строкой. There are other methods available to work with a string. Вы наверняка уже пользовались командами поиска и замены в текстовых редакторах. For example, you’ve probably used a search and replace command in an editor or word processor before. Метод Replace выполняет аналогичную задачу для строк. The Replace method does something similar in a string. Он находит некоторую подстроку и заменяет ее другим текстом. It searches for a substring and replaces it with different text. Метод Replace принимает два параметра. The Replace method takes two parameters. Это строки в скобках. These are the strings between the parentheses. Первая строка — это текст для поиска. The first string is the text to search for. Вторая строка — это текст для замены. The second string is the text to replace it with. Попробуйте сами. Try it for yourself. Добавьте этот код: Add this code. Введите его и наблюдайте подсказки, которые появятся при вводе .Re после переменной sayHello : Type it in to see the hints as you start typing .Re after the sayHello variable:

Два других полезных метода преобразуют все буквы строки в прописные или строчные. Two other useful methods make a string ALL CAPS or all lower case. Попробуйте следующий код: Try the following code. Введите его и наблюдайте, как IntelliSense предоставит подсказки при вводе To : Type it in to see how IntelliSense provides hints as you start to type To :

Этот онлайн-интерфейс для написания кода находится на этапе предварительной версии. This online coding experience is in preview mode. При возникновении проблем сообщите о них на странице репозитория dotnet/try. If you encounter problems, please report them on the dotnet/try repo.

Поиск по строкам Search strings

  • Осталось: 13 мин

Другая функция операции поиска и замены — поиск текста в строке. The other part of a search and replace operation is to find text in a string. Для поиска вы можете использовать метод Contains. You can use the Contains method for searching. Он покажет, содержит ли строка подстроку. It tells you if a string contains a substring inside it. Попробуйте выполнить код ниже, чтобы изучить Contains: Try the following code to explore Contains:

Метод Contains возвращает логическое значение, которое указывает, найдена ли искомая строка. The Contains method returns a boolean value which tells you if the string you were searching for was found. Логическое значение может принимать значение true или false . A boolean stores either a true or a false value. Логические значения будут более подробно рассмотрены на одном из следующих занятий. You’ll learn more about boolean values in a later lesson.

Задача Challenge

Существует два схожих метода (StartsWith и EndsWith) для поиска подстрок в строках. There are two similar methods, StartsWith and EndsWith that also search for sub-strings in a string. С их помощью выполняется поиск подстроки в начале или конце строки. These find a substring at the beginning or the end of the string. Попробуйте изменить пример выше таким образом, чтобы вместо Containsиспользовались StartsWith и EndsWith. Try to modify the previous sample to use StartsWith and EndsWith instead of Contains. Выполните поиск слов You или goodbye в начале строки. Search for «You» or «goodbye» at the beginning of a string. Выполните поиск слов hello или goodbye в конце строки. Search for «hello» or «goodbye» at the end of a string.

При проверке текста в конце строки учитывайте знаки пунктуации. Watch your punctuation when you test for the text at the end of the string. Если строка оканчивается точкой, необходимо проверить строки, которые оканчиваются точкой. If the string ends with a period, you must check for a string that ends with a period.

Вы должны получить значение true , поставив слово «You» в начале, а слово «hello» — в конце, и значение false, поставив в начале или конце слово «goodbye». You should get true for starting with «You» and ending with «hello» and false for starting with or ending with «goodbye».

Этот онлайн-интерфейс для написания кода находится на этапе предварительной версии. This online coding experience is in preview mode. При возникновении проблем сообщите о них на странице репозитория dotnet/try. If you encounter problems, please report them on the dotnet/try repo.

Заблуждения начинающих C# разработчиков. Пытаемся ответить на стандартные вопросы

Недавно мне выпала возможность пообщаться с довольно большим количеством начинающих специалистов по разработке на языке C#. Многие из них интересуются языком и платформой, и это очень круто. Среди зеленых юниоров распространено мракобесие по поводу очевидных (только что прочитавшему книгу про память) вещей. И это же натолкнуло меня на мысль о создании этой статьи. Статья в первую очередь нацелена на начинающих разработчиков, но думаю, что многие факты будут полезны и практикующим инженерам. Ну и самые очевидные и неинтересные заблуждения, разумеется, опущены. Здесь собраны наиболее интересные и значимые, особенно с точки зрения прохождения интервью.

#1. Мантра про 3 поколения в любой ситуации

Это скорее неточность, чем заблуждение. Вопрос про «сборщик мусора в C#» для разработчика стал классикой и уже мало кто не начнет на него бойко отвечать про концепцию поколений. Однако, почему-то, мало кто обращает внимание на то, что великий и ужасный сборщик мусора — часть рантайма. Соответственно, я бы дал понять, что не пальцем пихан, и спросил бы про какую среду исполнения идет речь. По запросу «сборщик мусора в c#» в интернетах можно найти более, чем много похожих сведений. Однако мало кто упоминает, что данная информация относится к CLR/CoreCLR (как правило). Но не стоит забывать и про Mono, легковесный, гибкий и встраиваемый рантайм, который занял свою нишу в мобильной разработке (Unity, Xamarin) и используется в Blazor. И для соответствующих разработчиков я бы посоветовал поинтересоваться подробностями устройства сборщика в Mono. Например, по запросу «mono garbage collector generations», можно увидеть, что поколения всего два — nursery и old generation (в новеньком и модном сборщике мусора — SGen).

#2. Мантра про 2 стадии сборки мусора в любой ситуации

Еще не так давно исходники сборщика мусора были скрыты от всех. Однако интерес к внутреннему устройству платформы был всегда. Поэтому информация извлекалась разными путями. И некоторые неточности при реверс-инжиниринге сборщика привели к мифу о том, что сборщик работает в 2 стадии: маркировка и чистка. Или и того хуже, 3 стадии — маркировка, чистка, сжатие.

Однако все изменилось, когда народ огня развязал войну с появлением CoreCLR и исходников сборщика. Код сборщика для CoreCLR был целиком взят из CLR версии. Никто с нуля его не писал, соответственно, почти все, что можно узнать из исходников CoreCLR, будет верно и для CLR. Теперь, чтобы понять, как что-то работает, достаточно зайти на github и найти это в исходном коде или прочитать readme. Там же можно увидеть, что существует 5 фаз: маркировки, планирования, обновления ссылок, компактинга (удаление с перемещением) и удаление без перемещений(перевести это дело сложно). Но формально это можно разделить на 3 этапа — маркировка, планирование, чистка.

На этапе маркировки выясняется, какие объекты не стоит собирать сборщику.
На этапе планирования производятся расчет различных показателей текущего состояния памяти и сбор данных, необходимых на этапе чистки. Благодаря информации, полученной на этом этапе, выносится решение о необходимости компактинга (дефрагментации), там же просчитывается, на сколько необходимо двигать объекты и т.д.

И на этапе чистки в зависимости от необходимости компактинга может производится обновление ссылок и компактинг или удаление без перемещений.

#3. Выделение памяти на куче так же быстро, как и на стеке

Опять же, скорее неточность, чем абсолютная неправда. В общем случае, конечно, разница в скорости выделения памяти минимальна. Действительно, в лучшем случае, при bump pointer allocation, выделение памяти — лишь сдвиг указателя, как и на стеке. Однако на выделение памяти в куче могут повлиять такие факторы, как присваивание нового объекта в поле старого (что затронет write barrier, обновляющий card table — механизм, позволяющий отслеживать ссылки из старшего поколения в младшее), наличие финализатора(необходимо добавить тип в соответствующую очередь) и др. Так же, возможно, объект будет записан в одну из свободных дыр в куче (после сборки без дефрагментации). А нахождение такой дыры происходить хоть и быстро, но, очевидно, медленнее, чем простой сдвиг указателя. Ну и разумеется каждый созданный объект приближает очередную сборку мусора. И на очередной процедуре выделения памяти она может случится. Что, естественно, займет некоторое время.

#4. Определение ссылочного, значимого типов и упаковки через понятия стека и кучи

Прямо классика, которая, к счастью, уже не так часто встречается.

Ссылочный тип располагается в куче. Значимый на стеке. Наверняка многие слышали эти определения очень часто. Но мало того, что это лишь частичная правда, так и определять понятия через протекшую абстракцию — не лучшая идея. За всеми определениями предлагаю обращаться к стандарту CLI — ECMA 335. Для начала стоит уточнить, что типы описывают значения. Так, ссылочный тип определяется следующим образом — значение, описываемое ссылочным типом (ссылка) указывает на расположение другого значения. Для значимого типа значение им описываемое является автономным(самосодержащим). Про то, где располагаются те или иные типы ни слова. Это является протекшей абстракцией, которую все же следует знать.

Значимый тип может располагаться:

  1. В динамической памяти (куче), если он является частью объекта, расположенного в куче, или в случае упаковки;
  2. На стеке, если он является локальной переменной/аргументом/возвращаемым значением метода;
  3. В регистрах, если то позволяет размер значимого типа и другие условия.

Ссылочный тип, а именно, значение на которое указывает ссылка, на текущий момент располагается в куче.

Сама же ссылка может располагаться там же, где и значимый тип.

Упаковка также не определяется через места хранения. Рассмотрим краткий пример.

И соответственный IL код для метода Main

Так как значимый тип является частью ссылочного очевидно, что располагаться он будет в куче. И шестая строка дает ясно понять, что мы имеем дело с упаковкой. Соответственно, типичное определение «копирование из стека в кучу» дает сбой.

Чтобы определить, что есть упаковка, для начала стоит сказать, что для каждого значимого типа CTS(common type system) определяет ссылочный тип, который называется упакованным типом. Так, упаковка — операция над значимым типом, создающая значение соответствующего упакованного типа, содержащего побитовую копию оригинального значения.

#4. События — отдельный механизм

События существуют с первой версии языка и вопросы о них встречаются гораздо чаще, чем сами события. Однако понимать и знать, что это такое, стоит, ведь этот механизм позволяет писать очень слабо связанный код, что иногда бывает полезно.

К сожалению, зачастую под событием понимается некий отдельный инструмент, тип, механизм. Особенно этому способствует тип из BCL EventHandler, имя которого наталкивает на мысли о том, что это что-то отдельное.

Определение события стоит начать с определения свойств. Я уже давно провел для себя такую аналогию, а недавно увидел, что она проведена и в спецификации CLI.

Свойство определяет именованное значение и методы, которые обращаются к нему. Звучит довольно очевидно. Переходим к событиям. CTS поддерживает события так же, как и свойства, НО методы для доступа отличаются и включают методы для подписки и отписки от события. Из спецификации языка C# — класс определяет событие… что напоминает объявление поля с добавлением ключевого слова event. Тип этого объявления должен быть типом делегата. Спасибо стандарту CLI за определения.

Итак, это означает, что событие — ничто иное, как делегат, который выставляет наружу лишь часть функциональности делегатов — добавление очередного делегата в список для выполнения, удаление из этого списка. Внутри же класса событие ничем не отличается от простого поля типа делегата.

#5. Управляемые и неуправляемые ресурсы. Финализаторы и IDisposable

Абсолютная путаница существует при работе с этими ресурсами. Этому во многом способствует интернет с тысячей статей о правильной реализации паттерна Dispose. Собственно, в этом паттерне ничего криминального нет — модифицированный шаблонный метод под конкретный случай. Но вопрос в другом — нужен ли он вообще. Почему-то, у части людей возникает непреодолимое желание реализовать финализатор на каждый чих. Скорее всего причиной этого является не полное понимание, что есть «неуправляемый ресурс». И строчки про то, что в финализаторах, как правило, освобождаются неуправляемые ресурсы из-за этого неполного понимания проходят мимо и не остаются в голове.

Неуправляемый ресурс — ресурс, который не является управляемым (как бы это странно ни было). А управляемый ресурс, в свою очередь, тот, который выделяется и высвобождается CLI автоматически через процесс который называется сборка мусора. Это определение я нагло содрал из стандарта CLI. Но если попытаться объяснить проще, то неуправляемые ресурсы — те, про которые не знает сборщик мусора. (Строго говоря мы можем давать сборщику немного информации про такие ресурсы с помощью GC.AddMemoryPressure и GC.RemoveMemoryPressure, это может оказать влияние на внутренние самотьюнинги сборщика). Соответственно, он не сможет сам позаботиться об их освобождении и поэтому мы должны сделать это за него. И подходов к этому может быть много. И чтобы код не пестрил от разнообразия воображения разработчиков, используются 2 общепринятых подхода.

  1. Интерфейс IDisposable (и его асинхронная версия IAsyncDisposable). Мониторится всеми анализаторами кода, так что забыть про его вызов сложно. Предоставляет единственный метод — Dispose. И поддержку компилятора — оператор using. Отличный кандидат на тело метода Dispose — вызов аналогичного метода одного из полей класса или освобождение неуправляемого ресурса. Вызывается явно пользователем класса. Наличие данного интерфейса у класса подразумевает, что по окончании работы с экземпляром, нужно вызвать этот метод.
  2. Финализатор. По своей сути является страховкой. Вызывается неявно, в неопределенное время, во время сборки мусора. Замедляет выделение памяти, работу сборщика мусора, продлевает время жизни объектов минимум до следующей сборки, а то и дольше, но зато вызывается сам, даже если его никто не вызывал. Из-за своей недетерминированной природы, в нем должны освобождаться только неуправляемые ресурсы. Также можно встретить примеры, в которых финализатор применялся для воскрешения(resurrection) объекта и организации пула объектов таким образом. Однако такая имплементация пула объектов — однозначно плохая идея. Как и пытаться логировать, кидать исключения, обращаться к базе и тысячи подобных действий.
Цукерберг рекомендует:  Как начать писать обзоры техники

И можно легко представить себе ситуацию при написании критической к производительности библиотеки, которая внутри использует неуправляемые ресурсы, что она обходится просто грамотным обращением с этим ресурсом, освобождая память аккуратно вручную. При написании таких высокопроизводительных библиотек, ООП, поддерживаемость и иже с ним уходит на второй план.

И вопреки утверждению, что Dispose нарушает концепцию, в которой CLR сделает все за нас, заставляет делать что-то самим, о чем-то помнить и тд, скажу следующее. При работе с неуправляемыми ресурсами, надо быть готовым, что они никем, кроме вас, не управляются. И вообще, ситуации, при которых данные ресурсы будут использоваться в ентерпрайсе, почти не встречаются. И в большинстве случаев можно обойтись замечательными классами обертками, вроде SafeHandle, который обеспечивает критическую финализацию ресурсов, предотвращая их преждевременную сборку.

Если же в вашем приложении по тем или иным причинам много ресурсов, требующих дополнительных действий для освобождения, то стоит взглянуть на отличный паттер компании JetBrains — Lifetime. Но не стоит его применять при виде первого же IDisposable объекта.

#6. Стек потока, стек вызовов, вычислительный стек и

Последний пункт добавил смеха ради, не думаю, что есть те, кто относит последнее к предыдущим двум. Однако путаницы с тем, что такое стек потока, стек вызовов и вычислительный стек довольно много.

Стек вызовов — структура данных, а именно стек, для хранения адресов возврата, для возвращения из функций. Стек вызовов — понятие больше логическое. Оно не регламентирует где и как должна храниться информация для возврата. Получается, что стек вызовов — самый обычный и родной нам стек т.е. Stack (Шутка). В нем же хранятся локальные переменные, через него передаются параметры и в нем же сохраняются адреса возврата при вызове инструкции CALL и прерываний, которые впоследствии используются инструкцией RET для возврата из функции/прерывания. Идем дальше. Одним из основных приколов потока является указатель на инструкцию, которая выполняется далее. Поток поочереди выполняет инструкции, объединяющиеся в функции. Соответственно у каждого потока есть стек вызовов. Таким образом получается, что стек потока и есть стек вызовов. То есть стек вызовов данного потока. Вообще, он также упоминается и под другими именами: программный стек, машинный стек.

Подробно рассматривался в предыдущей статье.
Также, определение стек вызовов используется для обозначения цепочки вызовов конкретных методов в каком-либо языке.

Вычислительный стек (evaluation stack). Как известно, код C# компилируется в IL код, который входит в состав результирующих DLL (в самом общем случае). И как раз в основе среды выполнения, поглощающей наши DLL и выполняющей IL код лежит стек-машина. Почти все IL инструкции оперируют неким стеком. Например, ldloc загружает локальную переменную под определенным индексом на стек. Здесь под стеком понимается некий виртуальный стек, ведь в итоге эта переменная может с высокой вероятностью оказаться и в регистрах. Арифметические, логические и др IL инструкции оперируют с переменными со стека и кладут результат туда же. То бишь вычисления производятся через этот стек. Таким образом получается, что вычислительных стек — абстракция в рантайме. К слову, многие виртуальные машины основаны на стек-машине.

#7. Больше потоков — быстрее код

Интуитивно кажется, что обрабатывать данные параллельно будет быстрее, чем поочередно. Поэтому вооружившись знаниями о работе с потоками, многие пытаются запараллелить любой цикл и вычисление. Почти все уже знают про оверхед, который вносит создание потока, поэтому лихо используют потоки из ThreadPool и Task. Но оверхед создания потока — далеко не конец. Здесь мы имеем дело с еще одной протекшей абстракцией, механизмом, который используется процессором для повышения производительности — кеш. И как часто это бывает, кеш является обоюдоострым клинком. С одной стороны он значительно ускоряет работу при последовательном доступе к данным из одного потока. Но с другой стороны, при работе нескольких потоков, даже без необходимости их синхронизации, кеш не только не помогает, но еще и замедляет работу. Дополнительное время тратится на инвалидацию кэша, т.е. поддержание актуальных данных. И не стоит недооценивать эту проблему, которая по началу кажется пустяком. Эффективный с точки зрения кэша алгоритм будет выполняться одним потоком быстрее, чем многопоточный, в котором кэш используется неэффективно.

Также пытаться работать с диском из многих потоков — самоубийство. Диск и без того является тормозящим фактором многих программ, которые с ним работают. Если пытаться работать с ним из многих потоков, то надо забыть о быстродействии.

За всеми определениями рекомендую обращаться сюда:

C# Language Specification — ECMA-334
Просто хорошие источники:
Konrad Kokosa — Pro .NET Memory Management
CLI specification — ECMA-335
CoreCLR developers about runtime — Book Of The Runtime
От Станислава Сидристого про финализацию и прочее — .NET Platform Architecture

Помогите чайнику=)

7 ответов

В свойстве
Form
WindowSate = wsMaximized;

выпей водки, найди хорошую девчонку и прыгни с парашютом.

Больше второго, первое только потом, если два последних пункта совсем не помогут :)

Все в порядке. Ты стал профессионалом.

Да я не эт хачу! Так я уже пробовал но так же можно нажать на иконку и окно уменьшится и так же можно будет извращатся с размером.=( Я и спрашиваю как сделать так чтобы этого не получалось.

Да , чтоб юзеры рот не разорвали надо обезопасится :)
Используй BorderIcons:
biSystemMenu
biMinimize etc.
Если не дашь им SystemMenu -> не смогут они глумится над тобой.

Преимущества и недостатки C# — Учим Шарп #1

Опубликовано shwan в 06.11.2020

Я хочу обсудить с тобой один очень важный вопрос, который достаточно часто упускают из внимания: действительно ли тебе нужно учить язык C#?

Что бы тебе ни рассказывали на всевозможных онлайн курсах, книгах, тренингах и конференциях, о том, как можно стать программистом за 21 день – все это ложь, п*дежь и провокация.

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

Поэтому, я предлагаю тебе предварительно рассмотреть основные преимущества и недостатки языка C#, перспективы развития, сферы применения и уровни зарплатных ожиданий. Это может помочь тебе понять действительно ли ты правильно инвестируешь свое время. А время – это самый ценный ресурс, запомни это.

История языка C#

Я постараюсь долго не задерживаться на этом пункте, но основную информацию расскажу.

Данный язык создан всеми так горячо любимой корпорацией Зла Microsoft в 2000 году. Он очень многое унаследовал от своих родителей (С++ и Java), но и привнес нового.

Возможной версией использования символа хештега принято считать наследование плюсиков от предков, примерно следующим образом: C → C++ → C++++(C#), потому что символ «#» при хорошем воображении можно получить путем объединения 4-х знаков «+».

Язык активно развивается. Регулярно выходят новые версии C#, которые добавляют новые синтаксические конструкции в язык, а также увеличивают его быстродействие и надежность.

Преимущества C#

Данный язык использует объектно-ориентированный подход к программированию во всем. Это означает, что тебе нужно будет описывать абстрактные конструкции на основе предметной области, а потом реализовывать между ними взаимодействие. Данный подход пользуется большой популярностью, потому что позволяет не держать в голове всю информацию, а работать по принципу черного ящика: подал входные данные -> МАГИЯ -> PROFIT.

Также в языке присутствует обилие синтаксического сахара, который делает тяжелую жизнь программиста капельку слаще. Вместо того, чтобы писать 100500 строк кода, ты просто используешь готовую конструкцию, а компилятор сделает за тебя всю грязную работу. Но некоторые такие конструкции являются не самыми оптимальными с точки зрения производительности. Но все это перекрывается за счет удобочитаемости кода и высокой скоростью разработки.

Еще стоит упомянуть, что все это работает на базе платформы .NET Framework. Что это означает? Для многих непосвященных, это просто какая-то приблуда, которую нужно установить на комп, чтобы программа запустилась, но дело обстоит значительно глубже. Написанный тобой код на языке C# транслируется в промежуточный язык (IL), который в свою очередь уже преобразуется в машинный код на твоем компьютере прямо во время выполнения приложения (JIT). Спрашивается, зачем это все? А суть в том, что ты можешь пилить со своим другом Васей на разных языках один и тот же проект и ни одному из вас не придется переучиваться. Но я никогда не видел, чтобы это реально использовали на практике. Но это еще не все. Так как окончательная компиляция из промежуточного кода выполняется в живую на твоей конкретной машине, то возможно увеличение производительности за счет использования специфических команд именно твоего процессора.

Лично для меня одним из самых важных плюсов является наличие большого количества библиотек и шаблонов, позволяющих не тратить время на изобретение своего собственного велосипеда, из костылей, со слоупоком за рулем.

Ты просто скачиваешь нужное тебе решение из nuget и начинаешь его использовать. В большинстве своем они бесплатны. Сюда же можно отнести большое количество обучающего и справочного материала. Практически на любой свой вопрос ты сможешь найти ответ на стековерфлоу. Ну а на крайний случай всегда можешь спросить в моем телеграм чате для программистов.

Немаловажно наличие хороших инструментов разработки, и здесь все очень хорошо. Абсолютное большинство разработчиков используют интегрированную среду разработки Visual Studio, которая предоставляет over9000 возможностей, использовать которые ты конечно же не будешь.

Но IDE действительно хороша, к тому же имеется ее полнофункциональная бесплатная версия Community.

Еще к плюсам можно отнести строгую типизацию, которая позволяет защититься от дурака, и не так давно появившаяся кросспратформенность в .NET Core (да-да, мелкомягкие потихоньку захватывают линукс).

Недостатки C#

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

C# очень легко дизассемблируется. Это означает, что с большой долей вероятности твой код будет получен и изучен конкурентами. Конечно же, есть специальные инструменты, которые могут усложнить этот процесс, но на 100% защититься от этого практически невозможно.

.NET использует концепцию JIT-компиляции. Это означает, что программа будет скомпилирована в машинные коды по мере необходимости прямо во время работы приложения. С одной стороны, это конечно прикольно, но при первом запуске возможны весьма серьезные тормоза.

C# не является повсеместно распространенным языком. Большинство программистов сосредоточены в коммерческой Enterprise сфере, что накладывает весьма серьезные ограничения на поиск работы в небольших городах, где кроме Delphi или PHP ничего жизни не видели. К тому же, как бы то ни было, C# в первую очередь ассоциируется с Windows. Вряд ли в обозримом будущем что-то изменится и Винда все также будет продолжать доминировать на рынке, но все же небольшой риск остается, особенно учитывая недавние фейлы с обновлениями в Windows 10.

Перспективы развития C#

C# входит в первую пятерку самых популярных языков программирования на 2020 год. Он используется во многих крупных компаниях, а также и в небольших стартапах. Сейчас компания Microsoft делает большой упор на развитие универсальности и кросспалтформенности для этого языка. Уже сейчас с его помощью можно разрабатывать практически любой тип приложений.

Компания Microsoft остается одной из крупнейших IT компаний мира, а C# ее флагманский язык программирования, который постоянно развивается и впитывает в себя все новые возможности. Поэтому в обозримом будущем проблем у данного языка возникнуть не должно.

Сферы применения языка C#

В этой области C#, наверное, впереди планеты всей. Хочешь разрабатывать обычные приложения для компьютера – пожалуйста, стандартные WinForms Application и консоль тебе в помощь. Хочешь такие же, но покрасивее? – используй WPF. И специальные приложения для магазина в Windows Store тоже. Веб-приложения? – Легко ASP.NET всегда придет на помощь. На Linux? – тоже не вопрос, .NET Core уже здесь. Мобильное приложение? – Xamarin сделает сразу под все платформы. Хочешь написать игру? – движок Unity показывает себя очень даже неплохо, и при этом также адаптирует игру под различные платформы. Хочешь приблизить апокалипсис с восстанием машин и создаешь искусственный интеллект? – есть целая платформа с кучей инструментов для этого Microsoft AI Platform. Также и для компьютерного зрения и ботов. Я вообще с трудом могу придумать пример того, что невозможно реализовать на C#. Я где-то встречал даже операционную систему написанную на шарпе. Поэтому в этой области все хорошо.

Зарплаты разработчиков C#

Здесь все в целом неплохо. По данным на 2020 год, C# явно не является самым высокооплачиваемым языком, но и не самый низкооплачиваемый тоже. Среднее значение зарплаты для данного языка в России около 90к рублей. Это весьма неплохой результат, но бесспорно есть и более дорогие языки. В целом, уровень заработной платы намного больше зависит от прямоты рук и уровня знаний, поэтому не так важно на каком языке писать, главное делать это хорошо. Но данная цифра задает примерный уровень для Middle разработчика в среднем по России. От этого уже можно отталкиваться.

Итоги

C# это объектно-ориентированный язык с большим количеством синтаксического сахара, что позволяет экономить время и силы. Он используется во многих крупны организациях, стартапах, а также начинающими. Имеется удобная и бесплатная среда разработки. Достаточно прост в освоении на базовом уровне, но содержит вагон и маленькую тележку скрытых особенностей, чтобы разобраться в которых потребуется много времени. Позволяет разрабатывать универсальные мобильные приложения и игры, но используется для этого достаточно редко.

В целом это перспективный язык, достаточно простой для освоения начинающим. Но следует помнить, что существует множество альтернатив, которые лучше подходят под некоторые задачи. Например, могу порекомендовать языки C++, Java, Python.

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

Основная идея C# — это универсальность. Ты можешь реализовать все на одном языке и для любой платформы, но с большой долей вероятности это будет работать медленнее, чем разработанное специально под конкретную платформу.

Он неплохо подходит как для начинающих в качестве первого языка, так и для реализации крупных коммерческих проектов.

На этом мы заканчиваем наш первый урок. Подписывайтесь на мои социальные сети: Вконтакте, Телеграм, YouTube и Дзен. Ну а еще есть специальный закрытый чат, для изучающих C# по моему курсу. С вами был Вадим. Пока!

Цукерберг рекомендует:  Факультет графического дизайна - отзывы студентов

Увлекательное введение в C#

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

  • Есть прекрасная среда программирования Visual Studio (с автодополнением, подсказками и т.д.)
  • Это язык, а котором вы сможете легко писать реальные программы (например, приложения Windows Phone), и который востребован на рынке труда
  • Это сравнительно простой язык, если сравнивать его с C/C++ или другими языками, которые обычно хотят изучать.

До недавнего времени мне приходилось рекомендовать всем заинтересовавшимся читать книжку «C# для школьников» (или соответствующий курс). Однако книжка – не всегда лучший способ научиться программировать. Надо самому делать примеры, экспериментировать с исходным кодом, пробовать решать задачи. Поэтому я решил сделать курс «Увлекательное введение в C#» и теперь с радостью вам сообщаю, что этот курс вышел на Microsoft Virtual Academy.

Чем этот курс замечателен:

  • Я постарался сделать курс увлекательным, поэтому многие задачи – это рисование с помощью черепашьей графики. Мы пишем команды для черепашки, а она рисует на экране все более сложные графические узоры. Библиотека для черепашьей графики взята из другого замечательного языка – Small Basic (я бы посоветовал изучать и его, но слишком уж маловероятно, что вам придется использовать Basic в будущем).
  • Всего 9 видео-уроков с промежуточными домашними заданиями (которые разбираются на следующих уроках) – и вы сможете научиться основам C#. Конечно, после этого для углубления знаний придется послушать более продвинутые курсы, например этот и вот этот, а возможно и этот.
  • В заключительном уроке мы программируем свое приложения для Windows Phone!

Этот курс – моя первая попытка рассказать про C# коротко и доступно. Насколько она получилась хорошо – судить вам. Я буду признателен за любые отзывы и комментарии, которые можно направлять мне вконтакте, или в комментариях к блогу. Это поможет сделать следующую версию курса для новых поколений более понятной и увлекательной. А пока что – разошлите ссылку на этот курс (https://aka.ms/learnsharp) всем своим знакомым, кто еще не умеет программировать – у них есть отличный шанс попробовать этому научиться!

Курс получился невероятно увлекательным! Действительно, смотрится на одном дыхании, в отличии от множества аналогичных, где хочется встать и уйти уже на 10 минуте.

Прекрасная дикция, интересный способо изложения, понятное пояснение терминологии. Наверное, единственное, что можно пожелать в этом случае – делать еще. Больше курсов, больше подробностей, больший акцент на то, как программируют опытные программисты, и соответственно описание их приёмов. По какому принципу расценивается «быдло-код» от «не быдло-кода». Как правильно строить мышление, что бы давать качественный продукт.

Я думаю, было бы замечательно, будь всё это частью единой программы. С домашними заданиями, по изучению побочных продуктов, вроде HTML, CSS, SharePoint, глубокие знания которых, может, и не требуются, но тем не менее, некоторые знания из их области важны для тех или иных решений.

Я работаю в ИТ уже больше 8 лет, и за все 8 лет я не нашел ни единой более-менее внятной программы изучения языка, что называется, «От А до Я». Возможно таковой и нет, не исключаю. НО! В сфере ИТ я руководствовался теми рекомендациями и «путями» которые прописывала Microsoft в своих схемах сертификации. К примеру, что бы достигнуть уровня Enterprise Administrator, нужно было сделать 2 экзамена базового уровня, а затем еще один – продвинутого. Тут всё понятно: к каждому экзамену есть свой набор знаний, Exam Prepы и т.д. Таким образом выстраивалась качественная очередность. Что же касается программрования – тут темный лес. Можно бегать от техноголии к технологии: откусить там, отхватить тут, и в итоге – никакой системы в голове, только набор цитат.

Было бы круто, если бы Вы описали, хотя бы общих мазках, что за чем нужно учить. Желательно, что бы элементами этих ступенек была определенная литература. На чем тренироваться. Как отлаживать и проверять. За такое вам можно было бы памятники воздвигать на манежных площадях!

А вообще, большое спасибо за Ваш труд!

Андрей, большое спасибо за отзыв! Будем работать, чтобы появлялось больше интересных курсов! Что изучать и в каком порядке – мы попытались собрать рекомендации на страничке http://mvaclub.ru, пока это лишь отчасти структурировано, но это первый шаг!

сегодня я закончила просмотр курса.

все достаточно понятно и просто.

планирую продолжить изучение с#!

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

Многие курсы имеют совсем другой стиль изложения «изучи всё, а потом будешь применять». Сначала разбираются все типы переменных, особенности изменения типов переменных, потом модификаторы доступа сразу все по очереди и т.д. В итоге я прихожу к тому, что я много знаю, но пока совершенно не понимаю, как это использовать, интерес пропадает. Здесь же ситуация иная – «начнём с малого и будет наращивать знания», по моему мнению, это самый верный подход. Сначала нужно каждый «инструмент» попробовать и понять, как он работает, а только потом переходить к следующему, а модификаторы доступа и т.д. потом в процессе. Также вы верно начали, не вдаваясь в типы переменных сразу, а задавая просто var. Когда просто словами описывают картинки и код – это одно, а когда он ещё и показывается линиями, то это намного понятнее!

Отличный курс! Спасибо огромное! Многие другие в MVA – сплошное разочарование после вашего!

Совершенно согласен с предыдущим комментарием. Я сам пересмотрел много видео «Изучи всё, а потом будешь применять». Теперь знания есть, но как применять на практике не имею понятия…

Спасибо, полезная штука, показываю десятилетнему сыну.

Спасибо, вам большое! Курс про введение в программирование C# мне очень понравился. Давно хотел научиться создавать программы. Что порекомендуете изучать дальше (другой курс, книгу…). Я бы хотел ещё научиться создавать программы с графическим интерфейсом, например свой Paint. Хотя я немного не понял различия между Console.Write и Console.WriteLine, но как мне кажется, это не важно. C# вообще прикольный язык. А на нём можно создавать приложения с кнопками, текстовыми полями, закладками, картинками и т.д.? Я не имею введу с помощью черепашки нарисовать такое приложение) кнопки-то работать не будут. Всем рекомендую http://www.microsoftvirtualacademy.com/…/exciting-programming-c-sharp-rus и, если ваш браузер блокирует всплывающие окна, разрешите всплывающие окна на этом сайте!

Спасибо Дмитрию Сошникову.

Порекомендовать ничего не могу, как мне кажется этот курс и так классный.

Спасибо большое за замечательный курс. Но… Зачем делать урок по программированию для Windows Phone? А у кого нет такого телефона, что делать?

А вы будете делать курсы программирования для Windows 10?

ForCoder

Навазние: C# 2005 для «чайников»
Автор: Стефан Рэнди Дэвис, Чак Сфер
Издательство:
Год: 2006
Страниц: 576
Язык: Русский
Размер: 12
Формат: pdf

Описание книги C# 2005 для «чайников»:
Даже еcли вы никогда не имели дела с программированием, эта книга поможет вам освоить с нуля язык С#. Вы сможете писать на нем программы любой степени сложности. Если вы уже знакомы с каким-либо иным языком программирования, тогда процесс изучения С# только упростится, но наличие опыта программирования — условие совершенно необязательное.

Книга познакомит вас не только с типами, конструкциями и операторами языки С#, но и с ключевыми концепциями объектно-ориентированного программирования, реализованными в этом языке, который в настоящее время представляет собой один из наиболее приспособленных для создания программ для Windows-среды.

Если Вы не только не изучали C#, но и вообще никогда не программировали, то эта книжка для Вас. Чем усерднее будете её штудировать, и чем дольше будете экспериментировать, тем больше получите информации. Это одна из тех книг, которая не преподнесёт Вам «рыбу», а вручит «удочку». Данный материал требует с Вашей стороны внимания и концентрации. При поверхностном изучении результат будет скуден. Поэтому настоятельно рекомендую вести подробный конспект пройденного материала, который необходимо периодически повторять. В итоге у Вас получится хорошо структурированный и систематизированный материал, чему будете приятно удивлены, и что даст хороший задел на будущее. Не предъявляйте к этой книжке много требований, она — всего лишь отправная точка, которая позволит Вам приступить к изучению более сложной литературы.

Описаны основы синтаксиса C# 2.0, иногда в сравнении с C++. Очень хорошее введение в объектно-ориентированное программирование (ООП), с «чувством», «толком» и «расстановкой», поэтому у Вас не возникнет проблем с осознанием ООП. Дан краткий обзор средств разработки и отладки, в том числе бесплатных. Некоторые из них размещены на прилагаемом CD. Дано краткое описание работы в этих средствах. В общем, содержимое этого комплекта достойное. Здесь есть всё для начинающего с нуля. Да, и ещё, разумеется, Вы научитесь создавать только консольные приложения, так как начнёте с «нуля». Что это такое? Начните читать.

Если вы в начале большого пути в программирование — смелее покупайте эту книгу: она послужит вам отличным путеводителем, который облегчит вам первые шаги на этом длинном, но очень увлекательном пути.

30,499 просмотров всего, 1 просмотров сегодня

C# для чайников

В ступление

Платформа .NET позволяет создавать распределенные приложения.

Преимуществами распределенных приложений являются:

  • возможность сконцентрировать в подходящих местах программный код, выполняющий специализированные задачи.
    Т.е. становится не нужно на каждой машине поддерживать программное обеспечение, выполняющее все функции
  • разные платформы могут использовать один и тот же код за счет того, что это специализированное программное обеспечение имеет общеизвестный интерфейс.
    Например сотовые телефоны с их специализированным программно-аппаратным обеспечением могут использовать код web-серверов реализованных по-другому.
  • Становится возможным предоставление платных услуг, например, вычислительных мощностей или информации.
    Здесь фирма предоставляющие услуги владеет одной частью системы, а пользователи — другой.
  • С точки зрения разработчика, платформа .NET это совокупность Common Language Runtime (CLR), .NET Framework Classes и высокоуровневых средств, таких как WinForms и Active Server Pages (ASP .NET)

    Common Language Runtime управляет выполнением кода, написанного для платформы .NET, Framework Classes позволяют работать с операционной системой, WinForms нужны для создания пользовательского интерфейса, а ASP для формирования web-страниц.

    Код для платформы может быть скомпилирован из исходных текстов, написанных на разных языках. Один из таких языков — C#.

    Шаг 2. Синтаксис C#

    Принято начинать описание языка с примера Hello World. Можете посмотреть этот

    Прежде всего, нужно сказать, что C# учитывает регистр идентификаторов. Компилятор выдаст ошибку, если, к примеру, написть слово Console с маленькой буквы.

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

    менее читабельно, чем

    В C# не бывает операторов вне функций, а функций вне классов. Поэтому в примере описан класс World и функция Main. Выполнение программы начинается с метода Main одного из классов программы. Стоит обратить внимание на то, что Main пишется с заглавной (большой) буквы. Имя класса может отличаться от имени того файла, в котором класс находится.

    Директивы using позволяют сократить имена идентификаторов из используемых библиотек. Так, например, объект Console на самом деле называется System.Console, но так как используется директива using, можно писать просто Console.

    Комментарии в C# бывают нескольких видов:

    • до конца строки — //
    • многострочные — /* */
    • для документации — ///

    Строки

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

    В C# есть два вида такой замены.

    1. Использование замен при помощи символа

    Символ, который надо заменить Цепочка
    «
    \\
    Звонок \a
    Забой \b
    Перевод страницы \f
    Новая строка \n
    Возврат каретки \r
    Табуляция \t
    Вертикальная табуляция \v
    Символ Unicode, заданный своим номером, например u200 \u
    Символ Unicode, заданный своим номером в 16-ричной системе счисления, например xc8 \x
    Символ с кодом ноль \0

    2. Строки с удвоенными кавычками (как в ZX Spectrum)
    Здесь нужно поставить перед строкой символ @ а затем удваивать кавычки внутри строки. Если такая строка занимает несколько строк программы, то будут сохранены символы перевода на новую строку и пробелы.

    Пример: если нужно записать строку

    то можно писать так:

    Переменные

    переменные в C# обязательно имеют тип и могут содержать только объекты этого типа (и производных).

    Есть три вида переменных

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

    Ссылки непосредственно содержат данные, позволяющие определить местоположение значения. Таким образом могут существовать несколько переменных ссылочного типа, ссылающиеся на одно значение. Если изменить значение через одну переменную такого типа, то изменится значение для всех таких переменных.

    Переменные-значения

    Ключевые слова языка C# отображаются (отображаются — являются сокращениями для имен) на типы пакета System, поэтому во второй колонке приведены названия этих типов

    тип C# тип из .Net Framework Знаковый бит Сколько байтов Граничне значения
    sbyte System.Sbyte есть 1 от -128 до 127
    short System.Int16 есть 2 от -32768 до 32767
    int System.Int32 есть 4 от -2147483648 до 2147483647
    long System.Int64 есть 8 от -9223372036854775808 до 9223372036854775807
    byte System.Byte нет 1 от 0 до 255
    ushort System.Uint16 нет 2 от 0 до 65535
    uint System.UInt32 нет 4 от 0 до 4294967295
    ulong System.Uint64 нет 8 от 0 до 18446744073709551615
    float System.Single есть 4 Примерно от ±1.5 x 10 -45 до ±3.4 x 10 38 , 7 значащих цифр
    double System.Double есть 8 Примерно от ±5.0 x 10 -324 до ±1.7 x 10 308 , 15 или 16 значащих цифр
    decimal System.Decimal есть 12 Примерно от ±1.0 x 10 -28 до ±7.9 x 10 28 , 28 или 29 значащих цифр
    char System.Char не применимо 2 любой символ Unicode (16-ти битный)
    bool System.Boolean не применимо 1 / 2 true и false

    Есть еще (immutable) класс string , объекты которого обязаны всегда создаваться заново, поэтому после выполнения кода

    строка s1 будет равна «goodbye», а s2 — «hello»

    Переменные — ссылки

    Переменные этого вида на самом деле хранят адрес начала памяти, в которой находятся данные, на которые эти переменные ссылаются.

    Новые типы могут быть определены при помощи конструкций ‘class’, ‘interface’ и ‘delegate’.

    Boxing

    C# позволяет преобразовывать переменные-значения в переменные-ссылки и обратно.

    Перечисления

    Перечисление — это тип, объекты которого могут иметь значения только из заданного набора. При определении типа можно указать значения, которые будут образовывать такой набор. Например это могут быть дни недели, месяцы года, виды валют, поддерживаемые системой, или что-то еще (что?).

    По умолчанию базовым типом для перечисления является тип integer. Первому значению сопоставляется число ноль, следующему 1 и т.д. (поэтому Sunday == 6). После последнего значения можно ставить запятую, а можно и не ставить

    Можно изменить базовый тип для перечисления

    Кроме того, можно задать значения первому элементу перечисления (последующие будут пронумерованы автоматически) или даже каждому элементу

    Можно распечатать символьное название константы (используя ToString())

    Здесь функция WriteLine заменяет на n-ый аргумент функции после строки

    Операторы

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

    Бесплатная электронная библиотека. Скачать книги бесплатно!

    Наша электронная библиотека Bookskeeper.ru — это интернет-витрина, где любой посетитель может публиковать электронные варианты книг, журналов, газет, комиксов, в общем, любой литературы со ссылками для медленного, но бесплатного скачивания с файлообменников.

    В нашем книжном хранилище Вы всегда найдете литературу на любой вкус человека любого возраста — от детских комиксов и расскрасок до серьезной научной литературы.

    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих