// Определение базового класса Animal
public class Animal
{
public string Name { get; set; }
public void Speak()
{
Console.WriteLine("Animal makes a sound");
}
}
// Определение производного класса Dog, который наследует от Animal
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Dog barks");
}
}
// Основной класс для демонстрации наследования
class Program
{
static void Main()
{
// Создание экземпляра класса Dog
Dog dog = new Dog();
// Установка имени
dog.Name = "Buddy";
// Вызов метода из базового класса
dog.Speak(); // Выведет: Animal makes a sound
// Вызов метода из производного класса
dog.Bark(); // Выведет: Dog barks
// Вывод имени
Console.WriteLine($"The dog's name is {dog.Name}"); // Выведет: The dog's name is Buddy
}
}
Animal
является базовым классом, содержащим метод Speak()
. Класс Dog
наследует от Animal
и добавляет свой метод Bark()
. В методе Main
демонстрируется создание объекта класса Dog
и использование методов как базового, так и производного классов. Это позволяет использовать уже определённые свойства и методы базового класса, расширяя функциональность производного класса.
using System;
using System.Data;
using System.Data.SqlClient;
class Program
{
static void Main()
{
// Строка подключения к базе данных
string connectionString = "Data Source=server;Initial Catalog=database;User ID=username;Password=password";
// Создание подключения
using (SqlConnection connection = new SqlConnection(connectionString))
{
// Открытие подключения
connection.Open();
// SQL-запрос для извлечения данных
string query = "SELECT * FROM Users";
SqlCommand command = new SqlCommand(query, connection);
// Выполнение запроса и получение данных
using (SqlDataReader reader = command.ExecuteReader())
{
// Чтение данных построчно
while (reader.Read())
{
// Доступ к данным по индексу или имени столбца
Console.WriteLine($"{reader["Id"]}, {reader["Name"]}");
}
}
}
}
}
using System;
using System.IO;
public class Program
{
public static void Main()
{
string filePath = "example.txt"; // Путь к файлу
// Создание FileStream для записи в файл
using (FileStream fileStream = new FileStream(filePath, FileMode.Create))
{
byte[] data = System.Text.Encoding.UTF8.GetBytes("Hello, FileStream!"); // Данные для записи
fileStream.Write(data, 0, data.Length); // Запись данных в файл
}
Console.WriteLine("Data written to file.");
}
}
using System;
using System.IO;
public class Program
{
public static void Main()
{
string filePath = "example.txt"; // Путь к файлу
// Создание FileStream для чтения из файла
using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
{
byte[] data = new byte[fileStream.Length]; // Буфер для хранения прочитанных данных
fileStream.Read(data, 0, data.Length); // Чтение данных из файла
string content = System.Text.Encoding.UTF8.GetString(data); // Преобразование данных в строку
Console.WriteLine("Data read from file: " + content); // Вывод прочитанных данных
}
}
}
using System;
using System.IO;
public class Program
{
public static void Main()
{
string filePath = "example.txt"; // Путь к файлу
// Создание FileStream для добавления данных в файл
using (FileStream fileStream = new FileStream(filePath, FileMode.Append))
{
byte[] additionalData = System.Text.Encoding.UTF8.GetBytes(" Appending more data."); // Данные для добавления
fileStream.Write(additionalData, 0, additionalData.Length); // Запись дополнительных данных в файл
}
Console.WriteLine("Additional data appended to file.");
}
}
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
// Создание словаря, где ключ - строка, а значение - целое число
Dictionary<string, int> ageDictionary = new Dictionary<string, int>();
// Добавление элементов в словарь
ageDictionary.Add("Alice", 30); // Ключ: Alice, Значение: 30
ageDictionary.Add("Bob", 25); // Ключ: Bob, Значение: 25
ageDictionary.Add("Charlie", 35); // Ключ: Charlie, Значение: 35
// Вывод элементов словаря
foreach (var item in ageDictionary)
{
Console.WriteLine($"{item.Key}: {item.Value}"); // Вывод ключа и значения
}
}
}
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Dictionary<string, int> ageDictionary = new Dictionary<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 }
};
// Проверка наличия ключа и получение значения
string key = "Alice";
if (ageDictionary.TryGetValue(key, out int age))
{
Console.WriteLine($"{key} is {age} years old."); // Вывод возраста Alice
}
else
{
Console.WriteLine($"{key} not found."); // Если ключ не найден
}
}
}
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
Dictionary<string, int> ageDictionary = new Dictionary<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 }
};
// Удаление элемента по ключу
ageDictionary.Remove("Bob"); // Удаление Bob
// Очистка словаря
ageDictionary.Clear(); // Удаляет все элементы из словаря
}
}
public class Person
{
public string Name { get; set; } // Имя
public int Age { get; set; } // Возраст
}
using System;
using System.IO;
using System.Xml.Serialization;
public class Program
{
public static void Main()
{
Person person = new Person { Name = "Alice", Age = 30 };
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, person); // Сериализация объекта
string xmlOutput = writer.ToString();
Console.WriteLine(xmlOutput); // Вывод XML
}
}
}
using System;
using System.IO;
using System.Xml.Serialization;
public class Program
{
public static void Main()
{
string xmlInput = "<Person><Name>Alice</Name><Age>30</Age></Person>"; // Пример XML
XmlSerializer serializer = new XmlSerializer(typeof(Person));
using (StringReader reader = new StringReader(xmlInput))
{
Person person = (Person)serializer.Deserialize(reader); // Десериализация XML
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // Вывод значений
}
}
}
public class Calculator
{
// Извлечение метода с помощью ReSharper
public int Add(int a, int b)
{
return a + b;
}
}
Activator
.
using System;
public class MyClass
{
public string Name { get; set; }
public MyClass(string name)
{
Name = name;
}
public void Display()
{
Console.WriteLine($"Name: {Name}");
}
}
public class Program
{
public static void Main(string[] args)
{
// Получение типа класса
Type myClassType = typeof(MyClass);
// Создание экземпляра класса с помощью рефлексии
object obj = Activator.CreateInstance(myClassType, new object[] { "Dynamic Instance" });
// Приведение к типу MyClass
MyClass myClassInstance = obj as MyClass;
// Вызов метода экземпляра
if (myClassInstance != null)
{
myClassInstance.Display();
}
}
}
MyClass
с конструктором и методом Display
.typeof(MyClass)
получается тип для использования в рефлексии.Activator.CreateInstance
создает новый экземпляр MyClass
, передавая параметры конструктора.MyClass
для доступа к его методам и свойствам.Display
вызывается для отображения значения свойства Name
.throw
. Это позволяет создать собственные исключения для специфических случаев, которые могут возникнуть в приложении.
// Определение собственного исключения
public class CustomException : Exception
{
public CustomException(string message) : base(message) { }
}
public class Example
{
public void TestMethod(int value)
{
// Проверка условия
if (value < 0)
{
// Выбрасывание собственного исключения
throw new CustomException("Значение не может быть отрицательным");
}
// Логика метода продолжается
}
}
public class Program
{
public static void Main(string[] args)
{
var example = new Example();
try
{
example.TestMethod(-1);
}
catch (CustomException ex)
{
// Обработка исключения
Console.WriteLine($"Ошибка: {ex.Message}");
}
}
}
CustomException
, который наследует от Exception
. Метод TestMethod
проверяет параметр value
и выбрасывает исключение, если значение отрицательное. В основной программе исключение перехватывается и обрабатывается, выводя сообщение об ошибке.
int[] numbers = new int[5]; // Создание массива с фиксированным размером 5
List<int> numbers = new List<int>(); // Создание пустого списка
numbers.Add(1); // Добавление элемента
int firstElement = numbers[0]; // Быстрый доступ по индексу
// Для добавления нового элемента придется создавать новый массив и копировать элементы
Add()
, Remove()
, Sort()
, Contains()
и т.д., упрощая работу с элементами.
numbers.Remove(1); // Удаление элемента
string[] strings = new string[3];
List<object> mixedList = new List<object>(); // Список может содержать элементы различных типов
example.com/products/details/1
.
public class Singleton
{
// Хранит единственный экземпляр класса
private static Singleton _instance;
// Объект для синхронизации доступа к экземпляру
private static readonly object _lock = new object();
// Закрытый конструктор, чтобы предотвратить создание экземпляров извне
private Singleton()
{
}
// Публичный метод для получения единственного экземпляра
public static Singleton Instance
{
get
{
// Двойная проверка блокировки для повышения производительности
if (_instance == null)
{
lock (_lock)
{
if (_instance == null)
{
_instance = new Singleton();
}
}
}
return _instance;
}
}
// Пример метода класса
public void SomeMethod()
{
// Здесь может быть логика метода
}
}
Instance
гарантирует, что будет создан только один экземпляр.int
, char
, struct) в объект, тем самым превращая его в ссылочный тип. При boxing создается новый объект в управляемой куче.
int number = 42; // Значимый тип
object box = number; // Boxing: упаковываем в объект
object box = 42; // Объект, содержащий значение
int number = (int)box; // Unboxing: распаковка значения
InvalidCastException
, если объект не содержит значение ожидаемого типа.
public async Task<string> GetDataAsync()
{
// Запускаем запрос в фоновом режиме
using (var httpClient = new HttpClient())
{
return await httpClient.GetStringAsync("https://example.com");
}
}
public class ObjectPool<T> where T : new()
{
private readonly Queue<T> _objects = new Queue<T>();
public T Get()
{
return _objects.Count > 0 ? _objects.Dequeue() : new T();
}
public void Return(T obj)
{
_objects.Enqueue(obj);
}
}
public string ConcatenateStrings(List<string> strings)
{
var sb = new StringBuilder();
foreach (var str in strings)
{
sb.Append(str);
}
return sb.ToString();
}
var filteredItems = items.Where(item => item.IsActive); // Не вызываем ToList сразу
Type
в C# используется для работы с типами данных во время выполнения. Он предоставляет информацию о типах, включая их свойства, методы, поля и конструкторы. Это особенно полезно при работе с рефлексией, когда необходимо изучить метаданные о типах, доступных в программе.
using System;
class Program
{
static void Main()
{
// Получаем тип строки
Type stringType = typeof(string);
// Выводим имя типа
Console.WriteLine($"Имя типа: {stringType.Name}"); // Имя типа: String
// Проверяем, является ли данный тип классом
Console.WriteLine($"Является классом: {stringType.IsClass}"); // Является классом: True
// Получаем базовый тип
Type baseType = stringType.BaseType;
Console.WriteLine($"Базовый тип: {baseType.Name}"); // Базовый тип: Object
// Получаем все методы типа
var methods = stringType.GetMethods();
Console.WriteLine("Методы типа:");
foreach (var method in methods)
{
Console.WriteLine(method.Name); // Выводим имена методов
}
// Создаем экземпляр объекта типа DateTime и получаем его тип
DateTime dateTime = DateTime.Now;
Type dateTimeType = dateTime.GetType();
Console.WriteLine($"Тип объекта dateTime: {dateTimeType.Name}"); // Тип объекта dateTime: DateTime
}
}
Type
предоставляет мощные инструменты для работы с типами и их метаданными. Его методы позволяют исследовать возможности объектов и манипулировать ими на этапе выполнения, делая рефлексию удобным инструментом для разработки приложений.XmlSerializer
. Этот класс позволяет преобразовать XML-данные в объекты .NET, основанные на заданных классах. Ниже приведен пример, демонстрирующий, как это сделать.
using System;
using System.IO;
using System.Xml.Serialization;
// Класс, представляющий данные из XML
[XmlRoot("Person")]
public class Person
{
[XmlElement("Name")]
public string Name { get; set; } // Свойство для имени
[XmlElement("Age")]
public int Age { get; set; } // Свойство для возраста
}
XmlSerializer
для десериализации.
class Program
{
static void Main()
{
// Пример XML строки
string xml = @"<Person>
<Name>Иван</Name>
<Age>30</Age>
</Person>";
// Создаем экземпляр XmlSerializer
XmlSerializer serializer = new XmlSerializer(typeof(Person));
// Преобразуем XML строку в объект Person
using (StringReader reader = new StringReader(xml))
{
Person person = (Person)serializer.Deserialize(reader);
Console.WriteLine($"Имя: {person.Name}, Возраст: {person.Age}"); // Выводим данные на экран
}
}
}
XmlSerializer
. Это позволяет работать с данными в более удобном виде, предотвращая необходимость ручного парсинга XML.
using Microsoft.AspNetCore.Mvc;
namespace HelloWorld.Controllers
{
public class HomeController : Controller
{
// Метод, возвращающий приветственное сообщение
public IActionResult Index()
{
return Content("Привет, мир!"); // Возвращаем текст в ответе
}
}
}
System.IO
. Ниже приведены примеры кода, показывающие, как это сделать.File.ReadAllText
, который считывает весь текст в строку.
using System;
using System.IO;
class Program
{
static void Main()
{
// Указываем путь к файлу
string path = "example.txt";
// Читаем содержимое файла
if (File.Exists(path))
{
string content = File.ReadAllText(path);
Console.WriteLine(content); // Выводим содержимое файла на экран
}
else
{
Console.WriteLine("Файл не найден.");
}
}
}
File.WriteAllText
, который записывает строку в файл, заменяя его содержимое.
using System;
using System.IO;
class Program
{
static void Main()
{
// Указываем путь к файлу
string path = "example.txt";
string content = "Привет, мир!"; // Содержимое для записи
// Записываем содержимое в файл
File.WriteAllText(path, content);
Console.WriteLine("Содержимое записано в файл.");
}
}
File.AppendAllText
для добавления текста в конец файла или File.ReadAllLines
для чтения файла построчно.
string additionalContent = "Добавленный текст.";
File.AppendAllText(path, additionalContent);
string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
Console.WriteLine(line); // Выводим каждую строку
}
System.IO
легко выполнять операции чтения и записи файлов в C#.