Класове
Класовете са основните строителни блокове в C#. Те са шаблони за създаване на обекти, които могат да съдържат методи, полета, свойства и събития.
Основна структура на клас
public class Person
{
// Полета
private string name;
private int age;
// Конструктор
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
// Свойства
public string Name
{
get { return name; }
set { name = value; }
}
// Автоматично имплементирано свойство
public int Age { get; set; }
// Методи
public void SayHello()
{
Console.WriteLine($"Hello, I'm {name}!");
}
}
Модификатори за достъп
public class AccessModifiers
{
public string PublicField; // Достъпно навсякъде
private string PrivateField; // Достъпно само в класа
protected string ProtectedField; // Достъпно в класа и наследниците
internal string InternalField; // Достъпно в текущия assembly
protected internal string ProtectedInternalField; // Комбинация от protected и internal
}
Наследяване
// Базов клас
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
// Наследник
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof!");
}
}
Абстрактни класове
public abstract class Shape
{
public abstract double CalculateArea();
// Може да съдържа и конкретна имплементация
public virtual void Draw()
{
Console.WriteLine("Drawing a shape");
}
}
public class Circle : Shape
{
private double radius;
public override double CalculateArea()
{
return Math.PI * radius * radius;
}
}
Sealed класове
// Не може да бъде наследяван
public sealed class FinalClass
{
public void DoSomething() { }
}
Partial класове
// Първа част
public partial class Customer
{
public string Name { get; set; }
}
// Втора част
public partial class Customer
{
public void Save() { }
}
Generic класове
public class Repository<T> where T : class
{
private List<T> items = new List<T>();
public void Add(T item)
{
items.Add(item);
}
public T GetById(int id)
{
return items.FirstOrDefault();
}
}
Статични класове и членове
public static class MathUtils
{
public static double PI = 3.14159;
public static int Add(int a, int b)
{
return a + b;
}
}
public class Counter
{
private static int count;
public static int Count
{
get { return count; }
}
public void Increment()
{
count++;
}
}
Вложени класове
public class Container
{
private int value;
public class Nested
{
private Container parent;
public Nested(Container parent)
{
this.parent = parent;
}
public void AccessParent()
{
Console.WriteLine(parent.value);
}
}
}
Статични класове
Статичните класове не могат да бъдат инстанцирани и съдържат само статични членове.
static class MathUtils {
public static int Square(int x) => x * x;
}
Интерфейси
Интерфейсите дефинират набор от методи и свойства, които класа трябва да реализира.
interface ILogger {
void Log(string message);
}