Поля и свойства
Часть раздела Объектно-ориентированное программирование путешествия по 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) и доступ к ним осуществляется через свойства. Свойства позволяют добавлять логику, валидацию и контроль над тем, как данные запрашиваются или изменяются. Автоматически реализуемые свойства удобны, когда вам не нужна дополнительная логика.
Задание
СреднеСоздайте класс 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}");
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыПространства имен и директивыВведение в классы и объектыКлючевое слово 'this'Методы и параметрыПоля и свойстваКонструкторыИнициализаторы объектовИтоги — Простой калькулятор4Наследование
Основы синтаксиса наследования (:)Ключевое слово 'base'Ключевые слова Virtual и OverrideЗапечатанные классыБазовый класс 'object'Итоги — Иерархия сотрудников7Продвинутые возможности
Перегрузка операторовИндексаторы (this[])Переопределение ToString()Методы расширенияПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПотокобезопасный SingletonПаттерн FactoryПаттерн Observer (События)Паттерн Strategy13Финальные испытания
Платформа для онлайн-обученияКомпонент игрового персонажаСервис аренды транспорта2Свойства и статические члены
Автоматически реализуемые свойстваСвойства только для чтения и записиСтатические поля и методыСтатические классыЧлены в виде выражений5Полиморфизм и интерфейсы
Полиморфизм: компиляция vs выполнениеИнтерфейс vs абстрактный классМножественные интерфейсыЯвные интерфейсыUpcasting и DowncastingИтоги: Калькулятор фигур8Продвинутые концепции ООП
Композиция вместо наследованияGenerics (классы и методы)Делегаты и событияАтрибуты и рефлексияIDisposable и оператор usingОсновы Dependency Injection11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Архитектура классов
Экземплярные и статические данныеКлючевые слова 'readonly' и 'const'Опорные поляПовторение — Менеджер банковских счетов6Инкапсуляция
Модификаторы доступаСвойства для инкапсуляцииРеализация скрытия данныхПаттерны неизменяемостиИтоги — Записи студентов9Переменное количество аргументов
Ключевое слово 'params'Необязательные параметрыИменованные аргументыПерегрузка методов