Menu
Coddy logo textTech

Поля и свойства

Часть раздела Объектно-ориентированное программирование путешествия по C# на Coddy — урок 6 из 70.

Поля — это переменные, объявленные непосредственно в классе. Свойства — это члены класса, которые обеспечивают контролируемый доступ к полям с помощью аксессоров get и set.

Поля хранят данные напрямую

public class Person
{
    // Поля — прямое хранение переменных
    private string name;
    private int age;
}

Свойства обеспечивают контролируемый доступ с помощью get и set

public class Person
{
    private string name;
    
    // Свойство с резервным полем
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Автоматически реализуемые свойства (сокращенная запись)

public class Person
{
    // Автоматически реализуемое свойство
    public string Name { get; set; }
    public int Age { get; set; }
}

Свойства могут содержать логику валидации

public class Person
{
    private int age;
    
    public int Age
    {
        get { return age; }
        set 
        { 
            if (value >= 0 && value <= 120)
                age = value;
        }
    }
}

Свойство только для чтения (только аксессор get)

public class Circle
{
    private double radius;
    
    public double Radius
    {
        get { return radius; }
    }
    
    // Вычисляемое свойство только для чтения
    public double Area
    {
        get { return Math.PI * radius * radius; }
    }
}

Поля обычно являются закрытыми (private) и доступ к ним осуществляется через свойства. Свойства позволяют добавлять логику, валидацию и контроль над тем, как данные запрашиваются или изменяются. Автоматически реализуемые свойства удобны, когда вам не нужна дополнительная логика.

challenge icon

Задание

Средне

Создайте класс BankAccount, который демонстрирует разницу между полями и свойствами:

  • Приватное поле balance для хранения баланса счета
  • Автоматически реализуемое свойство AccountName
  • Свойство только для чтения Balance, которое возвращает поле balance
  • Методы Deposit и Withdraw, которые изменяют приватное поле

Шпаргалка

Поля — это переменные, объявленные непосредственно в классе, в то время как свойства обеспечивают контролируемый доступ к полям с помощью аксессоров get и set.

Поля хранят данные напрямую:

public class Person
{
    private string name;
    private int age;
}

Свойства обеспечивают контролируемый доступ с помощью get и set:

public class Person
{
    private string name;
    
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Автоматически реализуемые свойства (сокращенная запись):

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

Свойства с логикой валидации:

public int Age
{
    get { return age; }
    set 
    { 
        if (value >= 0 && value <= 120)
            age = value;
    }
}

Свойство только для чтения (только аксессор get):

public double Area
{
    get { return Math.PI * radius * radius; }
}

Поля обычно являются закрытыми (private) и доступ к ним осуществляется через свойства. Свойства позволяют добавлять логику, валидацию и контроль над тем, как данные запрашиваются или изменяются.

Попробуйте сами

using System;

class Program
{
    static void Main()
    {
        string accountName = Console.ReadLine();
        decimal initialBalance = decimal.Parse(Console.ReadLine());
        decimal depositAmount = decimal.Parse(Console.ReadLine());
        
        BankAccount account = new BankAccount(accountName, initialBalance);
        
        Console.WriteLine($"Account: {account.AccountName}");
        Console.WriteLine($"Initial Balance: ${account.Balance}");
        
        account.Deposit(depositAmount);
        Console.WriteLine($"After Deposit: ${account.Balance}");
        
        string result = account.Withdraw(2000);
        Console.WriteLine($"Withdraw attempt: {result}");
        Console.WriteLine($"Final Balance: ${account.Balance}");
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование