Прескочи до съдържанието
Редактирай

Класове

Класове

Класовете са основните строителни блокове в 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);
}