Elementor Header #8

31. Свойства

1. Введение

Свойства (Properties) в C# позволяют безопасно управлять доступом к данным объекта, скрывая реализацию и предоставляя контролируемый доступ к переменным. Они похожи на методы, но используются как обычные переменные.

📌 Пример свойства:

				
					class Person
{
    public string Name { get; set; } // Автоматическое свойство
}

var person = new Person();
person.Name = "Алексей";   // Установка значения
Console.WriteLine(person.Name); // Алексей

				
			

🔹 Name ведёт себя как поле, но внутри использует специальные методы (геттер и сеттер).


2. Определение свойства

2.1. Полное свойство (с геттером и сеттером)

Свойства содержат два метода:

  • get – возвращает значение.
  • set – задаёт новое значение.

📌 Пример свойства с логикой внутри set:

				
					class Person
{
    private int age;

    public int Age
    {
        get { return age; }
        set
        {
            if (value > 0) age = value;  // Проверка перед установкой
        }
    }
}

var person = new Person();
person.Age = 25;  
Console.WriteLine(person.Age); // 25
person.Age = -5;  
Console.WriteLine(person.Age); // 25 (значение не изменилось)

				
			

🔹 Геттер возвращает age, а сеттер проверяет, что возраст неотрицательный.


2.2. Автоматическое свойство

Если не нужно добавлять логику в get или set, можно использовать автоматическое свойство.

📌 Пример:

				
					class Car
{
    public string Model { get; set; }  // Автоматическое свойство
}

				
			

🔹 Компилятор автоматически создаст приватное поле для хранения данных.


3. Различные модификаторы доступа

3.1. Только для чтения (get)

Если свойство только для чтения, то можно убрать set.

📌 Пример:

				
					class Circle
{
    public double Radius { get; }  // Только для чтения

    public Circle(double radius)
    {
        Radius = radius;  // Можно установить только в конструкторе
    }
}

				
			

🔹 Значение Radius можно установить только при создании объекта.


3.2. Только для записи (set)

Иногда нужно, чтобы свойство можно было только устанавливать, но не читать.

📌 Пример:

				
					class Secret
{
    private string _password;

    public string Password
    {
        set { _password = value; }  // Можно установить, но нельзя прочитать
    }
}

				
			

🔹 Можно задать пароль, но нельзя его получить.


3.3. Разные уровни доступа

Можно задать разные уровни доступа для get и set.

📌 Пример:

				
					class BankAccount
{
    public string Owner { get; private set; }  // Только чтение вне класса
    public decimal Balance { get; private set; } // Только внутри класса

    public BankAccount(string owner, decimal balance)
    {
        Owner = owner;
        Balance = balance;
    }

    public void Deposit(decimal amount)
    {
        if (amount > 0) Balance += amount;
    }
}

				
			

🔹 Owner и Balance можно читать, но изменять только внутри класса.


4. Свойства с вычисляемыми значениями

Свойство может вычислять значение вместо хранения.

📌 Пример:

				
					class Rectangle
{
    public double Width { get; set; }
    public double Height { get; set; }

    public double Area => Width * Height;  // Вычисляемое свойство
}

				
			

🔹 При каждом обращении Area пересчитывается.


5. Статические свойства

Статические свойства принадлежат классу, а не объекту.

📌 Пример:

				
					class Configuration
{
    public static string AppName { get; set; } = "My App";
}

Console.WriteLine(Configuration.AppName); // My App

				
			

🔹 Можно обращаться без создания объекта.

 Заключение

Свойства позволяют управлять доступом к данным объекта.
Полные свойства (get/set) дают гибкость и возможность контроля.
Автоматические свойства упрощают код, когда логика не нужна.
Модификаторы доступа (private, readonly, static) помогают защищать данные.
Вычисляемые свойства удобны, когда значение можно рассчитать.

🚀 Теперь вы знаете, как работать со свойствами в C#!

Тестовое задание

  1. Создайте класс Student, в котором есть:
    • Свойство Name (автоматическое).
    • Свойство Grade (оценка), которое можно установить только от 1 до 10.
    • Вычисляемое свойство IsExcellent, которое возвращает true, если оценка больше 8.

📌 Пример решения:

				
					using System;

class Student
{
    public string Name { get; set; }

    private int _grade;
    public int Grade
    {
        get { return _grade; }
        set { if (value >= 1 && value <= 10) _grade = value; }
    }

    public bool IsExcellent => Grade > 8;
}

class Program
{
    static void Main()
    {
        Student student = new Student { Name = "Анна", Grade = 9 };
        Console.WriteLine($"{student.Name} – Отличник? {student.IsExcellent}"); // Анна – Отличник? True
    }
}

				
			

Правильный код:

				
					string message = "Hello, world!";
char quote = '\"';
string path = @"C:\Users\Admin";

				
			

Задание 2: Выведите следующий текст

Создайте программу, которая выведет:

				
					Путь к файлу: "C:\Program Files\App"
Пример многострочного текста:
Это первая строка
    Это вторая строка

				
			

Пример кода:

				
					using System;

class Program
{
    static void Main()
    {
        string path = @"C:\Program Files\App";
        string multiLine = """
        Пример многострочного текста:
        Это первая строка
            Это вторая строка
        """;

        Console.WriteLine($"Путь к файлу: \"{path}\"");
        Console.WriteLine(multiLine);
    }
}

				
			

Попробуйте написать и запустить этот код, чтобы убедиться в правильности выполнения операций и особенностях работы с числами с плавающей точкой.

logo