СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Инкапсуляция как способ управления доступом к данным в языке C#.

Категория: Информатика

Нажмите, чтобы узнать подробности

Данный методический материал содержит презентацию к уроку " Инкапсуляция как способ управления доступом к данным в языке С#". Материал предназначен для подготовки к занятиям по данной теме, а также  для студентов, изучающих язык С# в дисциплинах "Основы алгоритмизации и программирования" и "Прикладное программирование".

Просмотр содержимого документа
«Инкапсуляция как способ управления доступом к данным в языке C#.»

Инкапсуляция как способ управления доступом к данным.

Инкапсуляция как способ управления доступом к данным.

Инкапсуляция  Через свойства можно установить доступ к приватным переменным класса. Подобное сокрытие состояния класса от вмешательства извне представляет механизм  инкапсуляции .  Применение модификаторов доступа типа private защищает переменную от внешнего доступа. Для управления доступом во многих языках программирования используются специальные методы, геттеры и сеттеры. В C# их роль выполняют свойства.

Инкапсуляция

Через свойства можно установить доступ к приватным переменным класса. Подобное сокрытие состояния класса от вмешательства извне представляет механизм  инкапсуляции .

Применение модификаторов доступа типа private защищает переменную от внешнего доступа. Для управления доступом во многих языках программирования используются специальные методы, геттеры и сеттеры. В C# их роль выполняют свойства.

 Например, есть некоторый класс Account, в котором определено поле sum, представляющее сумму:  class Account {      public int sum; }  Так как переменная sum является публичной, то в любом месте программы можно получить к ней доступ и изменить ее, в том числе установить какое-либо недопустимое значение, например, отрицательное. А это не является желательным. Поэтому применяется инкапсуляция для ограничения доступа к переменной sum и сокрытию ее внутри класса:

Например, есть некоторый класс Account, в котором определено поле sum, представляющее сумму:

class Account

{

     public int sum;

}

Так как переменная sum является публичной, то в любом месте программы можно получить к ней доступ и изменить ее, в том числе установить какое-либо недопустимое значение, например, отрицательное. А это не является желательным. Поэтому применяется инкапсуляция для ограничения доступа к переменной sum и сокрытию ее внутри класса:

0)              {                  sum=value;              }          }      } } " width="640"

class Account

{

     private int sum;

     public int Sum

     {

         get {return sum;}

         set

         {

             if (value 0)

             {

                 sum=value;

             }

         }

     }

}

Автоматические свойства  Свойства управляют доступом к полям класса. Однако, если полей много, то определять каждое поле и писать для него однотипное свойство было бы утомительно. Поэтому в фреймворк .NET были добавлены автоматические свойства. Они имеют сокращенное объявление: class Person {      public string Name { get; set; }      public int Age { get; set; }        public Person(string name, int age)      {          Name = name;          Age = age;}}  

Автоматические свойства

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

class Person

{

     public string Name { get; set; }

     public int Age { get; set; }  

     public Person(string name, int age)

     {

         Name = name;

         Age = age;}}

 

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

В примере также создаются поля для свойств, только их создает не программист в коде, а компилятор автоматически генерирует при компиляции.

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

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

Автосвойствам можно присвоить значения по умолчанию (инициализация автосвойств):

class Person {      public string Name { get; set; } =

class Person

{

     public string Name { get; set; } = "Tom";

     public int Age { get; set; } = 23;

}

class Program

{

     static void Main(string[] args)

     {

         Person person = new Person();

         Console.WriteLine(person.Name); // Tom

         Console.WriteLine(person.Age);  // 23

         Console.Read();

     }

}

 Если не укажем для объекта Person значения свойств Name и Age, то будут действовать значения по умолчанию.  Автосвойства также могут иметь модификаторы доступа: class Person {      public string Name { private set; get;}      public Person(string n)      {          Name = n;      } }

Если не укажем для объекта Person значения свойств Name и Age, то будут действовать значения по умолчанию.

Автосвойства также могут иметь модификаторы доступа:

class Person

{

     public string Name { private set; get;}

     public Person(string n)

     {

         Name = n;

     }

}

 Можно убрать блок set и сделать автосвойство доступным только для чтения. В этом случае для хранения значения этого свойства для него неявно будет создаваться поле с модификатором readonly, поэтому следует учитывать, что подобные get-свойства можно установить либо из конструктора класса, как в примере выше, либо при инициализации свойства: class Person {      public string Name { get;} =

Можно убрать блок set и сделать автосвойство доступным только для чтения. В этом случае для хранения значения этого свойства для него неявно будет создаваться поле с модификатором readonly, поэтому следует учитывать, что подобные get-свойства можно установить либо из конструктора класса, как в примере выше, либо при инициализации свойства:

class Person

{

     public string Name { get;} = "Tom"

}

name;      // эквивалентно public string Name { get { return name; } }      } " width="640"

Сокращенная запись свойств

Как и методы, можно сокращать свойства. Например:

class Person

{

     private string name;

      public string Name = name;

     // эквивалентно public string Name { get { return name; } }

     }