Начните свое знакомство с C# с помощью этого руководства

Начните свое знакомство с C# с помощью этого руководства

4 марта 2023 г.

В последнее время я поставил перед собой задачу уменьшить барьеры для людей, которые хотят начать программировать. Если вы только начинаете, это может быть невероятно пугающим и часто заставляет людей бросить курить еще до того, как они начнут. Если учесть, сколько языков программирования можно выбрать, это еще один барьер для начала работы. Как вы выбираете? Какой лучший? Я уже говорил о том, как начать работу, и если вы готовы начать работу с экосистемой «dotnet», то эта статья по основам C# для вас!

(Читайте оригинальную статью об основах C# здесь )

Для некоторой истории C# был первоначально создан еще в 2000 году, хотя, если вы посмотрите эту другую страницу, мы можем видите, похоже, что C# 1.0 на самом деле вышел в 2002 году . В качестве домашнего задания вы можете прочитать обо всех дискуссиях о C# и Java!

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

В этой статье мы рассмотрим основы C#, от настройки среды для эффективного написания кода до написания вашей первой программы!

Попробуйте видео!

https://youtube.com/live/uBTp0RTLr4A?embedable=true

Начало работы с C

Если вы просто хотите попробовать написать код, охватывающий основы C#, вы можете использовать онлайн-компилятор, такой как .NET Fiddle. Я бы сказал, что использование подобного онлайн-компилятора — один из самых быстрых и простых способов просто приступить к написанию кода. Однако у этого будут ограничения, поэтому, если вы пытаетесь продолжить разработку некоторых приложений, вам нужно сделать следующий шаг.

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

После установки IDE мы можем перейти к первой программе каждого... "Hello, World!" . Мы рассмотрим, что происходит, в следующем коде, который вы можете скопировать и вставить прямо в новый проект, который вы создаете!

Основы Hello World на C#

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

После этого мы определяем наше собственное пространство имен под названием «MyFirstProgram». Как видите, после этого у нас есть несколько фигурных скобок и код, вложенный внутрь этих фигурных скобок. Таким образом, это будет означать, что весь код, который мы поместим внутрь, будет принадлежать пространству имен «MyFirstProgram».

Мы определяем новый класс под названием «Программа» внутри пространства имен, где класс используется для группировки функций в определенный тип. Аналогия с папкой-файлом, с которой я начал, здесь начинает немного разбиваться, но вы можете думать о классе почти как о файле в одной из ваших папок (т. е. о вашем пространстве имен). В этом конкретном примере кода «Программа» класс является точкой входа в программу, которую мы пишем, поэтому, когда ваша программа запускается, она будет искать static метод под названием «Main» в вашем «Program» классе. Часть string[] args, которую вы видите, представляет собой параметр (в данном случае массив аргументов командной строки), который можно передать нашей программе.

Наконец, внутри метода Main мы используем метод Console.WriteLine, чтобы написать текст «Hello, World!» к консоли. Итак, если вы думаете об окне командной строки, эта программа просто выводит эти слова для вас. И все!

Зачем столько работы?!

Следует признать, что для вашей самой первой программы такая структура не кажется слишком удобной. Какого черта нам понадобилось записывать так много вещей и объяснять так много понятий только для того, чтобы иметь возможность увидеть распечатанный текст?!

Ты прав. И на самом деле, в более новых версиях языка это было решено с помощью заявления верхнего уровня. Вы можете воспользоваться этим в C# 10 и более поздних версиях. Операторы верхнего уровня избавляют от всего лишнего, так что вы можете буквально сделать свою программу Hello World примерно такой:

Console.WriteLine("Hello, World!");

Это НАМНОГО более дружелюбно, верно? Я начал с устаревшего примера по нескольким причинам:

  • Большая часть кода будет доступна с примерами в устаревшем формате. Не вдаваясь в историю, вы можете задаться вопросом, какого черта все используют этот шаблон, который кажется дополнительной дополнительной работой без какой-либо пользы.
  • Это была возможность объяснить некоторые основные элементы организации кода C# и подготовить нас к следующим частям, посвященным основам C#!

Переменные и типы данных

Когда мы создаем программы, нам часто нужно что-то, что может иметь для нас разные значения. Нам нужно какое-то состояние в наших алгоритмах или вещи для подсчета и т. д. Они называются «переменными». C# предъявляет некоторые требования к переменным, в том числе необходимость их определения и присвоения им «типа». Вот пример:

int myNumber = 1337;

Этот пример кода показывает целое число (int в качестве первого написанного там слова), которое мы объявляем с именем «myNumber». Мы также присваиваем этому целому числу значение 1337. Итак, это показывает объявление переменной И присваивание вместе взятые. Вы можете разделить их на несколько строк, если хотите:

int myNumber;
myNumber = 1337;

C# называют «строго типизированным» языком, что означает, что все наши переменные должны быть объявлены с определенным типом. Есть более сложные темы, связанные с этим, где это правило нарушается, но мы еще не совсем там! В C# доступно множество различных типов для использовать сразу, и к ним относятся некоторые примитивные типы, такие как< /а>:

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

using System;

namespace VariablesAndDataTypes
{
    class Program
    {
        static void Main(string[] args)
        {
            int myNumber = 1337;
            float myFloat = 133.7;
            double myDouble = 133.7;
            bool myBool = true;
            string myString = "Hello, World!";
        }
    }
}

Поток управления: если & Переключить

«операторы if» — это тип потока управления, который позволяет вам выполнять указанный код, если выполняется условие. То есть, если у вас есть код, который условно должен выполняться, вы можете поместить его внутрь «оператора if». «операторы if» — один из ключевых элементов основ C#, но они также почти повсеместно применимы к другим языкам программирования в качестве основного строительного блока для логики ветвления.

Вот пример «оператора if», который также содержит ветки else, определяющие, является ли число положительным, отрицательным или нулевым:

int num = 5;
if (num < 0)
{
    Console.WriteLine("The number is negative.");
}
else if (num > 0)
{
    Console.WriteLine("The number is positive.");
}
else
{
    Console.WriteLine("The number is zero.");
}

Для этого мы также можем использовать то, что называется оператором switch, и в этом примере мы будем использовать функцию, называемую сопоставлением с образцом:

int num = 5
string result = num switch
{
    > 0 => "The number is positive.",
    < 0 => "The number is negative.",
    _ => "The number is zero.",
};
Console.WriteLine(result);

Поток управления: циклы

Еще одна основополагающая часть наших основ C#, да и вообще любого языка программирования, — это концепция циклов. Циклы позволяют выполнять код несколько раз с потенциально разными состояниями, пока не будут выполнены некоторые условия.

В C# нам доступны следующие типы циклов:

    Циклы
  • for: используются для выполнения блока кода определенное количество раз.
  • Циклы
  • while: используются для многократного выполнения блока кода, пока заданное условие выполняется.
  • Циклы
  • do-while: используются для многократного выполнения блока кода до тех пор, пока заданное условие не перестанет выполняться.
  • Циклы
  • foreach: используются для перебора элементов коллекции или массива.

Давайте посмотрим на пример кода, который использует цикл for для перебора массива (то есть коллекции) целых чисел:

int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{
    Console.WriteLine(numbers[i]);
}

В приведенном выше коде наш цикл for начинается с 0, используя целочисленную переменную с именем i, которая будет увеличиваться на 1 на каждой итерации цикла, но только пока значение i меньше длины массива. И если вам интересно, почему мы начинаем с нуля и только тогда, когда он меньше длины массива, то это потому, что первая позиция в массиве на самом деле имеет индекс 0! К этому нужно привыкнуть, но многие языки программирования основаны на нуле, поэтому позиция 1 на самом деле является индексом 0.

Мы могли бы написать аналогичный код, используя цикл foreach:

int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int num in numbers){
    Console.WriteLine(num);
}

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

Методы и методы Функции

В программировании методы и функции относятся к коду, который мы можем пометить идентификатором и повторно использовать в программе. В C# мы определяем методы и функции внутри класса (или, если вы используете эти причудливые операторы верхнего уровня, то они могут существовать вне класса) и состоят из:

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

Вот пример простого метода:

int AddNumbers(int num1, int num2)
{
    return num1 + num2;
}

В приведенном выше примере, поскольку в начале сигнатуры метода нет модификатора доступа, он будет private. Этот метод возвращает целое число, называется «AddNumbers» и принимает два целочисленных параметра (num1 и num2). Когда мы смотрим на фактическое тело метода, мы видим, что он складывает два числа вместе, а затем у нас есть ключевое слово return, которое говорит, что мы будем предоставлять сумму этих двух чисел. вызывающему объекту этого метода в качестве результата.

Основы классов и объектов C#

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

Когда мы определили функциональность класса class, мы можем создать новый экземпляр этого класса, который будет использоваться с помощью ключевого слова new. Это выделяет в память новую ссылку на class, с которой мы можем работать. Исключением является случай, когда мы имеем дело с ключевым словом static, но это домашнее задание!

Прежде чем мы перейдем к этому примеру, я кратко упомянул «свойства», и стоит упомянуть, что свойство в C# очень похоже на методы, которые мы уже рассматривали. Однако в самом простом случае свойство — это специальный метод, который позволяет нам получить и/или установить значение класса. По сути, это просто методы, которые мы видели ранее, но у нас есть причудливый синтаксис, чтобы выделить их.

Вот пример простого класса с двумя свойствами и методом, который выводит некоторую информацию:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public void PrintInfo()
    {
        Console.WriteLine("Mm name is " + Name + " and I am " + Age + " years old.");
    }
}

Это означает, что если бы мы создали более одного экземпляра класса, у нас могли бы быть две разные ссылки Person с разными значениями:

Person p1 = new Person();
p1.Name = "Nick"
p1.Age = 33;

Person p2 = new Person();
p2.Name = "Jamal";
p2.Age = 18;

p1.PrintInfo();
p2.PrintInfo();

Выполнение приведенного выше кода распечатает информацию для двух разных объектов Person!

Краткий обзор основ C#

C# имеет много общих строительных блоков, которые мы видим в других языках программирования, особенно в объектно-ориентированных языках программирования. Мы рассмотрели базовую структуру программы C# и такие вещи, как хранение информации в переменных, управление потоком кода и простой пример объектов.

Однако C# — мощный язык, и хотя мы сосредоточились на основах C#, мы можем сделать гораздо больше! Разработчики создают игры, веб-сайты, масштабируемые распределенные сервисы, мобильные приложения и т. д. – все это с помощью C#!

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

:::информация Прочитайте оригинальную статью об основах C# здесь.

:::


Оригинал