137.05K
Категория: ПрограммированиеПрограммирование

Свойства

1.

Свойства

2.

• Кроме обычных методов в языке C#
предусмотрены специальные методы
доступа - свойства.
• Они обеспечивают простой доступ к полям
классов и структур, сообщают их значение
или выполняют их установку.

3.

• В C# по умолчанию все поля являются
частными (private).
• Если поле объявить общедоступным
(public), то его значение можно будет
читать и изменять в любых частях
программы.

4.

• Возникают ситуации, когда нужно сделать
поле доступным за пределами класса, и в
то же время контролировать способ работы
с ним.
• Например, разрешить только читать
значение поля или записывать в него
данные из определённого диапазона.

5.

• Этого можно достичь, используя закрытое
поле и метод класса для доступа к нему.
• Свойства обеспечивают более удобный
способ доступа к закрытым полям в
различных частях программы.
• Позволяют получать и устанавливать
значения закрытых полей класса вне
определения класса.

6.

• Если связать поле со свойством, то свойство
будет ограничивать действия,
выполняемые над этим полем за
пределами класса.

7.

• Свойство состоит из имени и аксессоров
(средств доступа) get и set.
• get используется для чтения содержимого
закрытого поля,
• set - для записи в него нового значения.

8.

Описание свойства:
• ДОСТУП ТИП ИМЯ {
• get {
• КОД ЧТЕНИЯ ПОЛЯ
• }
• set {
• КОД ЗАПИСИ ПОЛЯ
• }
• ДОСТУП - спецификатор доступа; ТИП - тип
свойства; ИМЯ - имя свойства.

9.

• После того, как свойство объявлено, его можно
использовать вместо поля, которое оно защищает.
• Имя свойства можно записывать в выражениях и
операторе присваивания подобно полям; только в
этом случае будут вызываться аксессоры get или set
(в зависимости от контекста).
• Как правило, имена свойств совпадают с именами
полей, однако имена полей записываются со
строчной буквы, а имена свойств - с прописной
буквы.

10.

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

11.

• Аксессоры подобны методам за
исключением того, что у них отсутствуют
параметры и, следовательно, скобки.
• Любое свойство может состоять из одного
или двух аксессоров; важно, чтобы
присутствовал один из них.

12.

• Если в свойстве определяется только аксессор
get, то изменение соответствующего поля
запрещено.
• Если в описании свойства присутствует только
аксессор set, то чтение содержимого поля
невозможно.
• В аксессоре set используется ключевое слово
value - параметр, через который передаётся
значение поля.
• Обращение к свойству, как и к полю,
выполняется с помощью операции «точка».

13.

• Вопрос: зачем нужны свойства, если мы
можем в данной ситуации обходиться
обычными полями класса?
• Свойства позволяют вложить дополнительную
логику, которая может быть необходима,
например, при присвоении переменной
класса какого-либо значения.
• Например, нам надо установить проверку по
возрасту:

14.

• class Person
• {
private int age;
public int Age
{
set
{
if (value < 18)
{
Console.WriteLine("Возраст должен быть больше 18");
}
else
{
age = value;
}
}
get { return age; }
}
• }

15.

• class Program {
• public static void Main(){
• Person comp1 = new Person();
• //вызывается аксессор set свойства Age
• comp1.Age = 15;
• //вызывается аксессор get свойства Nameиз контекста:
• Console.Write("Возраст: " + comp1.Age );

16.


using System;
namespace Свойства{
class Company {
string name; //название
int persons; //количество сотрудников
int money; // месячный фонд заработной платы
public string Name { // свойство
get { return name; }
set {if (name == null) name = value;}
}
public int Persons { // свойство
get { return persons; }
set { persons = value;}
}
// методы
public Company () {
// конструктор
persons = 10000;}
}

17.


class Program {
public static void Main(){
Company comp1 = new Company();
//вызывается аксессор set свойства Name-из контекста
Comp1.Name = "АБВГД";
//вызывается аксессор get свойства Name-из контекста:
Console.Write("В компании " + comp1.Name );
//вызывается аксессор get свойства Persons:
Console.WriteLine(" трудятся " +comp1.Persons+ "
сотрудников");
// повторное изменение названия компании //
название компании не изменится:
Comp1.Name = "КЛМН";
// вызывается аксессор set свойства Persons
Comp1.Persons += 10;
Console.WriteLine("В компании " + comp1.Name +
"трудятся " + comp1.Persons + " сотрудников")
}}}

18.

Массивы объектов

19.

• using System;
• namespace Свойства{
• class Person{
• public string name;
• public int age;
• public Person(string name, int age){ this.name =
name; this.age = age;}
• public void show()
{Console.WriteLine("Сотруднику " + name +"
исполнилось " + age +
" лет ");}}

20.

• class Program {
• public static void Main(){
• Person[] Faculty = new Person[4];
• Faculty[0] = new Person("Vasya", 20);
Faculty[1] = new Person("Petya", 22);
Faculty[2] = new Person("Anya", 19);
Faculty[3] = new Person("Sveta", 25);
Faculty[1].show();
• Faculty[3].show();}}}
English     Русский Правила