Автоматически реализуемые свойства




Свойства

[спецификатор] тип имя_свойства

{

Get

{

//КОД( аксессор)

}

Set

{

//КОД( аксессор)

}

}

Тип - обозначает конкретный тип свойства, например int,

имя — присваиваемое свойству имя.

Спецификатор – уровень доступа. (public, private, ….)

Как только свойство будет определено, любое обращение к свойству по имени приведет к автоматическому вызову соответствующего аксессора(код). Кроме того, аксессор(код) set принимает неявный параметр value, который содержит значение, присваиваемое свойству.

1. Свойства объединяют функции полей и методов.

2. Для объекта, использующего какой-либо объект, свойство является полем, поэтому для доступа к свойству требуется тот же синтаксис, что и для поля.

3. Для средства реализации класса свойство является одним или двумя блоками кода, представляющими метод доступа get и/или метод доступа set.

4. Блок кода для метода доступа get выполняется, когда осуществляется чтение свойства;

5. Блок кода для метода доступа set выполняется, когда свойству присваивается новое значение.

6. Свойство без метода доступа set считается доступным только для чтения.

7. Свойство без метода доступа get считается доступным только для записи.

8. Свойство с обоими методами доступа доступно для чтения и для записи.

9. В отличие от полей свойства не классифицируются как переменные. Поэтому свойство нельзя передать в качестве параметра ref (Справочник по C#) или out (Справочник по C#).

10. Свойства могут быть объявлены как public, private, protected, internal или protected internal. Эти модификаторы доступа определяют порядок доступа к свойству для пользователей класса.

11. Методы доступа get и set могут иметь различные модификаторы доступа для одного свойства. Например,

a. метод доступа get может иметь модификатор public для разрешения доступа только для чтения из типа,

b. а метод доступа set может иметь модификатор private или protected.

12. Свойство можно объявить как статическое свойство при помощи ключевого слова static. При этом свойство становится доступным для вызова в любое время, даже если экземпляр класса отсутствует.

13. Свойство можно пометить как виртуальное свойство при помощи ключевого слова virtual. Это позволяет производным классам переопределять поведение свойства при помощи ключевого слова override.

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

15. Свойство можно объявить как abstract. Это означает, что в классе отсутствует реализация, поэтому производные классы должны создавать свою собственную реализацию.

https://msdn.microsoft.com/ru-ru/library/w86s7x04.aspx

 

Автоматически реализуемые свойства

В C# 3.0 и более поздних версиях автоматически реализуемые свойства делают объявление свойств более лаконичным, когда в методах доступа к свойствам не требуется дополнительная логика. Они также позволяют клиентскому коду создавать объекты.

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

https://msdn.microsoft.com/ru-ru/library/bb384054.aspx

Свойствам присущ ряд существенных ограничений:

1. Cвойство не определяет место для хранения данных, и поэтому не может быть передано методу в качестве параметра ref или out.

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

3. Cвойство не подлежит перегрузке. Наличие двух разных свойств с доступом к одной и той же переменной допускается, но это, скорее, исключение, чем правило.

4. Cвойство не должно изменять состояние базовой переменной при вызове аксессора get. И хотя это ограничительное правило не соблюдается компилятором, его нарушение считается семантической ошибкой. Действие аксессора get не должно носить характер вмешательства в функционирование переменной.

https://professorweb.ru/my/csharp/charp_theory/level5/5_14.php

 

Деструктор

https://professorweb.ru/my/csharp/charp_theory/level5/5_6.php

Задание:

Преобразовать класс компьютер

1. Убрать поле данных freeMem

2. Преобразовать метод public int freeMemory()(т.к поле freeMem уже не существует)

3. Все поля данных сделать private

4. Для полей написать свойства

5. Создать объект класса и инициализировать его, конструктором по умолчанию

6. Вывести на экран параметры компьютера.

7. С помощью свойств установить другие значения параметров компьютера.

8. Вывести на экран параметры компьютера.

9. Создать новое private поле offOn типа bool.

10. Для нового поля создать метод offComp – выключающий компьютер, метод onComp – включающий компьютер. Методы должны возвращать значение типа bool.

11. В конструкторе по умолчанию поле offOn должно быть отключено.

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

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

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

//class comp компьютер

//Конструкторы

//msdn.microsoft.com/ru-RU/Library/hh147286(v=vs.88).aspx

namespace ConsoleClassCar_03

{

class Program

{

class comp

{

public string Name;

public int ozy;

public int HDD;

private int freeMem;

public int buzyMem;

public void Info()

{

Console.WriteLine("\nПараметры компьютера ");

Console.WriteLine("Имя компьютера - " + Name);

Console.WriteLine("ОЗУ компьютера - " + ozy);

Console.WriteLine("HDD компьютера - " + HDD);

Console.WriteLine("Занято памяти компьютера - " + buzyMem);

}

// с параметрами

public comp(string NM, int OZY, int hdd, int bM)

{

Name = NM;

ozy = OZY;

HDD = hdd;

buzyMem = bM;

freeMem = hdd - buzyMem;

}

// по умолчанию

public comp()

{

Name = "****";

ozy = 0;

HDD = 0;

buzyMem = 0;

freeMem = 0;

}

public int freeMemory()

{

freeMem = HDD - buzyMem;

return freeMem;

}

}

static void Main(string[] args)

{

Console.ReadKey();

 

}

}

}

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-15 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: