Свойства являются именованными членами классов, структур и интерфейсов. Переменные или методы-члены в классе или структурах называются полями . Свойства являются расширением полей и доступны с использованием того же синтаксиса. Они используют методы доступа, с помощью которых можно читать, записывать или манипулировать значениями приватных полей.
Свойства не называют места хранения. Вместо этого у них есть средства доступа, которые читают, записывают или вычисляют свои значения.
Например, у нас есть класс с именем Student, с закрытыми полями для возраста, имени и кода. Мы не можем напрямую получить доступ к этим полям за пределами области действия класса, но у нас могут быть свойства для доступа к этим частным полям.
Accessors
Метод доступа к свойству содержит исполняемые операторы, которые помогают в получении (чтении или вычислении) или установке (записи) свойства. Декларации доступа могут содержать метод доступа get, набор доступа set или оба. Например —
// Declare a Code property of type string: public string Code { get { return code; } set { code = value; } } // Declare a Name property of type string: public string Name { get { return name; } set { name = value; } } // Declare a Age property of type int: public int Age { get { return age; } set { age = value; } }
пример
Следующий пример демонстрирует использование свойств —
using System; namespace tutorialspoint { class Student { private string code = "N.A"; private string name = "not known"; private int age = 0; // Declare a Code property of type string: public string Code { get { return code; } set { code = value; } } // Declare a Name property of type string: public string Name { get { return name; } set { name = value; } } // Declare a Age property of type int: public int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // Create a new Student object: Student s = new Student(); // Setting code, name and the age of the student s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info: {0}", s); //let us increase age s.Age += 1; Console.WriteLine("Student Info: {0}", s); Console.ReadKey(); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —
Student Info: Code = 001, Name = Zara, Age = 9 Student Info: Code = 001, Name = Zara, Age = 10
Абстрактные свойства
Абстрактный класс может иметь абстрактное свойство, которое должно быть реализовано в производном классе. Следующая программа иллюстрирует это —
using System; namespace tutorialspoint { public abstract class Person { public abstract string Name { get; set; } public abstract int Age { get; set; } } class Student : Person { private string code = "N.A"; private string name = "N.A"; private int age = 0; // Declare a Code property of type string: public string Code { get { return code; } set { code = value; } } // Declare a Name property of type string: public override string Name { get { return name; } set { name = value; } } // Declare a Age property of type int: public override int Age { get { return age; } set { age = value; } } public override string ToString() { return "Code = " + Code +", Name = " + Name + ", Age = " + Age; } } class ExampleDemo { public static void Main() { // Create a new Student object: Student s = new Student(); // Setting code, name and the age of the student s.Code = "001"; s.Name = "Zara"; s.Age = 9; Console.WriteLine("Student Info:- {0}", s); //let us increase age s.Age += 1; Console.WriteLine("Student Info:- {0}", s); Console.ReadKey(); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующий результат —