paint-brush
C#: от основ к продвинутым методам — шпаргалка для начинающихк@ssukhpinder
3,464 чтения
3,464 чтения

C#: от основ к продвинутым методам — шпаргалка для начинающих

к Sukhpinder Singh16m2024/03/24
Read on Terminal Reader

Слишком долго; Читать

Подробная шпаргалка по C# призвана помочь разработчикам освоить ключевой синтаксис и концепции, связанные с программированием на C#.
featured image - C#: от основ к продвинутым методам — шпаргалка для начинающих
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item

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

Содержание

  1. Базовая структура
  2. Типы данных
  3. Переменные
  4. Константы
  5. Условные операторы
  6. Петли
  7. Массивы
  8. Списки
  9. Словари
  10. Методы
  11. Классы и объекты
  12. Обработка исключений
  13. Делегаты, события и лямбды
  14. LINQ (интегрированный язык запрос)
  15. Атрибуты
  16. Асинхронный/ожидающий
  17. Разнообразный
  18. Строковые манипуляции
  19. Файловый ввод-вывод
  20. Дата и время
  21. Дженерики
  22. Обнуляемые значения
  23. Атрибуты и отражение
  24. Методы расширения
  25. Внедрение зависимости
  26. Частичные классы
  27. Совместимость
  28. Анонимные типы
  29. Кортежи
  30. Сопоставление с образцом
  31. Локальные функции
  32. Рекорды
  33. с выражениями
  34. Индексаторы и диапазоны
  35. используя декларацию
  36. Обнуляемые ссылочные типы (NRT)
  37. Использование шаблонов
  38. Шаблоны свойств
  39. Реализации интерфейса по умолчанию
  40. Динамическая привязка

1. Базовая структура

Все программы C# имеют фундаментальную структуру, описанную ниже:

 using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }


Начиная с .NET 5, операторы верхнего уровня упрощают содержимое Program.cs:

 Console.WriteLine("Hello, World");

2. Типы данных

C# поддерживает различные типы данных, такие как:

  • Типы значений: int, char и float.
  • Типы ссылок: строка, класс и массив.

3. Переменные

Переменные — это символические имена значений:

 int age = 30; // integer variable string name = "John"; // string variable double PI = 3.14159; // double for floating-point numbers bool isLoggedIn = true; // boolean variable

Используйте 'var' для вывода типа:

 var number = 5; // compiler infers type as int var message = "This is a message"; // compiler infers type as string

4. Константы

Константы содержат неизменяемые значения:

 const double GRAVITY = 9.81; // constant for gravitational acceleration const string COMPANY_NAME = "MyCompany"; // constant company name

5. Условные операторы

Управляйте ходом программы на основе условий:

 int age = 20; if (age >= 18) { Console.WriteLine("You are eligible to vote."); } else { Console.WriteLine("You are not eligible to vote."); } switch (variable) { /*...*/ } // Switch statement

6. Петли

Выполните код несколько раз:

 for (int i = 1; i <= 5; i++) { Console.WriteLine(i); } foreach (var item in collection) { /*...*/ } // Foreach loop while (condition) { /*...*/ } // While loop do { /*...*/ } while (condition); // Do-while loop

7. Массивы

Коллекции элементов фиксированного размера:

 string[] names = new string[3] { "Alice", "Bob", "Charlie" }; Console.WriteLine(names[1]); // Output: Bob (accessing element at index 1)

8. Списки

Динамические коллекции, похожие на массивы:

 List<int> numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); foreach (var number in numbers) { Console.WriteLine(number); }

9. Словари

Пары ключ-значение для ассоциации данных:

 Dictionary<string, string> phonebook = new Dictionary<string, string>(); phonebook.Add("John Doe", "123-456-7890"); phonebook.Add("Jane Doe", "987-654-3210"); Console.WriteLine(phonebook["John Doe"]); // Output: 123-456-7890

10. Методы

Инкапсулируйте повторно используемую логику:

 public class Rectangle { public double Width { get; set; } public double Height { get; set; } public double GetArea() { return Width * Height; } } public class Program { public static void Main(string[] args) { Rectangle rect = new Rectangle(); rect.Width = 5; rect.Height = 10; double area = rect.GetArea(); Console.WriteLine($"Area of rectangle: {area}"); } }

11. Классы и объекты

Классы определяют чертежи объектов:

 public class MyClass // Class definition { public string PropertyName { get; set; } // Properties store data public void MethodName() { /*...*/ } // Methods define actions } MyClass obj = new MyClass(); // Object creation

12. Обработка исключений

Грамотно управляйте ошибками времени выполнения:

 public static int GetNumberInput() { while (true) { try { Console.WriteLine("Enter a number: "); string input = Console.ReadLine(); return int.Parse(input); } catch (FormatException) { Console.WriteLine("Invalid input. Please enter a number."); } } } public static void Main(string[] args) { int number = GetNumberInput(); Console.WriteLine($"You entered: {number}"); }

13. Делегаты, события и лямбда

Для событийно-ориентированного программирования и обработки методов:

 public delegate void MyDelegate(); // Delegate declaration event MyDelegate MyEvent; // Event declaration public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { List<Person> people = new List<Person>() { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 }, new Person { Name = "Charlie", Age = 40 }, }; people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); foreach (var person in people) { Console.WriteLine(person.Name); // Output: Alice, Bob, Charlie (sorted by name) } }

14. LINQ (интегрированный язык запрос)

Возможности запросов для манипулирования данными:

 using System.Linq; public static void Main(string[] args) { List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6 }; var evenNumbers = numbers.Where(x => x % 2 == 0); foreach (var number in evenNumbers) { Console.WriteLine(number); // Output: 2, 4, 6 } }

15. Атрибуты

Добавьте метаданные к элементам кода:

 [Obsolete("Use the new DoSomethingV2 method instead.")] public void DoSomething() { // Implementation here } public void DoSomethingV2() { // New and improved implementation }

16. Асинхронность/ожидание

Для неблокирующего выполнения кода:

 using System.Threading.Tasks; public static async Task DownloadFileAsync(string url, string filePath) { // Simulate downloading data asynchronously await Task.Delay(2000); // Simulate a 2-second download // Write downloaded data to the file File.WriteAllText(filePath, "Downloaded content"); Console.WriteLine($"File downloaded to: {filePath}"); } public static void Main(string[] args) { string url = "https://example.com/data.txt"; string filePath = "downloaded_data.txt"; DownloadFileAsync(url, filePath); // Continue program execution while download happens in the background Console.WriteLine("Downloading file..."); Console.WriteLine("Meanwhile, you can do other things..."); }

17. Разное

Дополнительные возможности языка:

  • перечисление, интерфейс, класс, запись и структура


  • динамический, это, как, var и nameof

18. Манипуляции со строками

Мощные методы обработки строк:

 string.Concat(); // Combine strings string.Join(); // Join elements str.Split(); // Split string str.ToUpper(); // Convert to uppercase str.ToLower(); // Convert to lowercase

19. Файловый ввод-вывод

Операции с файлами:

 using System.IO; // Required for File I/O File.ReadAllText(path); // Read file content File.WriteAllText(path, content); // Write to file File.Exists(path); // Check file existence

20. Дата и время

Манипулирование датой и временем:

 using System; public static void Main(string[] args) { DateTime startDate = DateTime.Parse("2024-03-10"); DateTime endDate = DateTime.Now; TimeSpan difference = endDate - startDate; Console.WriteLine($"Time difference: {difference.Days} days, {difference.Hours} hours"); }

21. Дженерики

Типобезопасные структуры данных:

 public class Stack<T> { private List<T> items = new List<T>(); public void Push(T item) { items.Add(item); } public T Pop() { T item = items[items.Count - 1]; items.RemoveAt(items.Count - 1); return item; } } public static void Main(string[] args) { Stack<string> messages = new Stack<string>(); messages.Push("Hello"); messages.Push("World"); string message = messages.Pop(); Console.WriteLine(message); // Output: World }

22. Обнуляемые значения

Разрешить типам значений быть нулевыми:

 int? nullableInt = null; // Nullable integer

23. Атрибуты и отражение

Метаданные и интроспекция типов:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Type personType = typeof(Person); PropertyInfo[] properties = personType.GetProperties(); foreach (PropertyInfo property in properties) { Console.WriteLine(property.Name); // Output: Name, Age } }

24. Методы расширения

Добавьте методы к существующим типам:

 public static class StringExtensions { public static string ToUppercase(this string str) { return str.ToUpper(); } } public static void Main(string[] args) { string message = "Hello, world!"; string uppercased = message.ToUppercase(); // Using the extension method Console.WriteLine(uppercased); // Output: HELLO, WORLD! }

25. Внедрение зависимостей

Слабосвязанный дизайн кода:

 public interface ILogger { void LogMessage(string message); } public class MyService { private readonly ILogger _logger; public MyService(ILogger logger) { _logger = logger; } public void DoSomething() { _logger.LogMessage("Doing something..."); } } // Implementing the ILogger interface (example) public class ConsoleLogger : ILogger { public void LogMessage(string message) { Console.WriteLine(message); } } public static void Main(string[] args) { ILogger logger = new ConsoleLogger(); MyService service = new MyService(logger); service.DoSomething(); }

26. Частичные классы

Разделение одного определения класса:

 public partial class MyClass { /*...*/ } // Partial class definition

27. Совместимость

Взаимодействие с другими языками:

 using System; using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType); public static void Main(string[] args) { MessageBox(IntPtr.Zero, "Hello from C#!", "Interop Example", 0); }

28. Анонимные типы

Создание безымянных типов: csharpКопировать код

 var person = new { Name = "John", Age = 30 }; Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

29. Кортеж

Структуры данных с определенным количеством элементов:

 (string Name, int Age) person = ("Alice", 30); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // Accessing elements using Item1 and Item2

30. Сопоставление с образцом

Упрощает некоторые задачи программирования:

 object obj = new Person { Name = "Bob", Age = 25 }; if (obj is Person { Name: "Bob", Age >= 18 }) { Console.WriteLine("Bob is an adult."); }

31. Локальные функции

Инкапсулируйте логику внутри методов:

 public static int Calculate(int number) { int Factorial(int n) { if (n == 0) return 1; return n * Factorial(n - 1); } return Factorial(number); } public static void Main(string[] args) { int result = Calculate(5); Console.WriteLine($"5! = {result}"); }

32. Рекорды

Краткий синтаксис для ссылочных типов:

 public record Person(string Name, int Age); public static void Main(string[] args) { Person person1 = new Person("Alice", 30); Person person2 = new Person("Alice", 30); // Records provide default equality comparison if (person1 == person2) { Console.WriteLine("People are equal"); } }

33. с выражениями

Неразрушающая мутация записей:

 var john = new Person("John", 30); var jane = john with { Name = "Jane" }; // Non-destructive mutation

34. Индексаторы и диапазоны

Гибкий доступ к данным:

 int[] arr = {0, 1, 2, 3, 4, 5}; var subset = arr[1..^1]; // Indexer and range usage

35. использование декларации

Удалить объекты IDisposable:

 using var reader = new StreamReader("file.txt"); // using declaration

36. Обнуляемые ссылочные типы (NRT).

Избегайте исключений нулевых ссылок:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Person person = new Person() { Age = 30 }; // NRTs require null checks before accessing properties if (person?.Name != null) { Console.WriteLine(person.Name); } else { Console.WriteLine("Name is null"); } }

37. Использование шаблонов

Больше шаблонов в операторе using:

 public ref struct ResourceWrapper { /*...*/ } // Resource wrapper using var resource = new ResourceWrapper(); // Pattern-based using

38. Шаблоны свойств

Деконструировать объекты при сопоставлении с образцом:

 if (obj is Person { Name: "John", Age: var age }) { /*...*/ } // Property pattern matching

39. Реализации интерфейса по умолчанию

Интерфейсы с реализациями методов по умолчанию:

 public interface IPerson { /*...*/ } // Interface with default method public class MyClass : IPerson { /*...*/ } // Class implementing interface

40. Динамическая привязка

Разрешение типа времени выполнения:

 dynamic d = 5; // Dynamic binding d = "Hello"; // No compile-time type checking

Заключение

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

Программирование на C#🚀

Благодарим вас за то, что вы являетесь частью сообщества C#! Прежде чем ты уйдешь:

Если вы зашли так далеко, пожалуйста, выразите свою признательность аплодисментами и подпишитесь на автора! 👏️️

Следуйте за нами: X | LinkedIn | Dev.to | Хашнод | Информационный бюллетень | Тамблер

Посетите другие наши платформы: GitHub | Инстаграм | Тикток | Кора | Daily.dev

Вдохновлено: https://zerotomastery.io/cheatsheets/csharp-cheat-sheet/#constants


Также опубликовано здесь