Основне меню  

   

Реклама  

Скачуйте відеуроки для створення сайту за допомогою SMS Joomla 

реклама

 

 

   

Ми в Facebook  

Калькулятор расчета пеноблоков смотрите на этом ресурсе
Все о каркасном доме можно найти здесь http://stroidom-shop.ru
Как снять комнату в коммунальной квартире смотрите тут comintour.net
   

Реклама в мережі  

   

Статистика  

Користувачі
1
Статті
184
Перегляди статей
862368
   

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

   

Ми знаходимось тут  

   

Посібник Delphi  

ДОСТУПНИЙ ВИКЛАД,

ЦІКАВІ ПРИКЛАДИ, ВИХІДНІ КОДИ.

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 500 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Посібник по C#  

 Вивчаємо сучасну мову  програмування C# 7.0

ПРОГРАМУЄМО в VISUAL STUDIO 2017

ЦІНА ДИСКА З МАТЕРІАЛАМИ - 1000 грн. 

Якщо ваша карта обслуговується ПриватБанком тоді переведіть потрібну суму через Приват24 на карту    5168 7573 0556 9925 або натисніть на посилання "Перейти до оплати", щоб здійснити миттєвий платіж без комісії. Перейти до оплати!

 Звертайтесь за адресою еmail:kuzbyt@ukr.net

 
   

Випадкове фото  

   

Наш відеоканал  

   

Відвідування сайту  

Яндекс.Метрика

 

   

Відеокурс по С++  

   

Рекомендуємо:  

   

Даний уро к є продовженням попереднього, присвяченого спадкоємцям.

У Сі-шарп є можливість створення масиву (або списку) вказівників на базовий клас в якому в якості елементів можуть бути об'єкти класу-спадкоємця. Наприклад, ми можемо створити масив об'єктів Тварина, і елементами такого масиву будуть об'єкти класів Собака, Кішка.

Приклад:

class Animal

{

   public string Name {get; set; }

   public Animal (string name)

   {

     Name = name;

   }

}

class Dog: Animal

{

   public Dog (string name): base (name)

   {}

   public void Guard ()

   {

     // Собака охороняє

   }

}

class Cat: Animal

{

  public Cat (string name): base (name)

   {}

  public void CatchMouse ()

  {

     // Кішка ловить миша

  }

}

class Program

{

   static void Main (string [] args)

   {

     List <Animal> animals = new List <Animal> (); // Створюємо список покажчиків на базовий клас

     animals.Add (new Dog ("Барбос"));

     animals.Add (new Cat ("Барсік"));

     animals.Add (new Dog ("Полкан"));

      foreach (Animal animal in animals)

     {

       Console.WriteLine (animal.Name);

     }

     Console.ReadLine ();

  }

}

Хоча як елементи в цей список ми додавали об'єкти класів-спадкоємців Собака і Кішка, будучи елементами списку покажчиків на базовий клас, ці об'єкти перетворюються до об'єктів базового класу, і ми маємо доступ тільки до тієї частини об'єктів, яка описана в базовому класі - ми не можемо тут викликати методи Guard () або CatchMouse (), але при цьому маємо доступ до імені тварини.

Зворотне тут неможливо. Не можна створити масив об'єктів класу Собака, і записати в нього об'єкти класу Тварина.

Оператор is

Оператор is працює дуже просто - він перевіряє сумісність об'єкта з вказаним типом (належить об'єкт певного класу). Оператор is повертає істину (true), якщо об'єкт належить класу. Істинна буде також при перевірці сумісності об'єкта класу-спадкоємця і базового класу:

static void Main (string [] args)

{

   Dog dog1 = new Dog ("Барбос");

   Console.WriteLine (dog1 is Dog); // True

   Console.WriteLine (dog1 is Animal); // True

   Console.WriteLine (dog1 is Cat); // False

   Console.ReadLine ();

}

Користуючись оператором is і явним перетворенням, тепер ми можемо повноцінно використовувати масив покажчиків на базовий клас:

class Animal

{

   public string Name {get; set; }

  public Animal (string name)

   {

     Name = name;

   }

}

class Dog: Animal

{

   public Dog (string name): base (name)

   {}

    public void Guard ()

  {

     Console.WriteLine (Name + "охороняє");

   }

}

class Cat: Animal

{

  public Cat (string name): base (name)

   {}

    public void CatchMouse ()

   {

     Console.WriteLine (Name + "ловить миша");

   }

}

class Program

{

   static void Main (string [] args)

  {

     List <Animal> animals = new List <Animal> ();

     animals.Add (new Dog ("Барбос"));

     animals.Add (new Cat ("Барсік"));

     animals.Add (new Dog ("Полкан"));

     foreach (Animal animal in animals)

     {

       if (animal is Dog) // перевіряємо чи є дане тварина собакою

         ((Dog) animal) .Guard ();

       else ((Cat) animal) .CatchMouse ();

     }

     Console.ReadLine ();

   }

}

Тут, використавши явне перетворення, ми отримуємо повний доступ до об'єктів зі списку, і можемо викликати методи Guard () і CatchMouse ().

 Оператор as

У прикладі вище, замість явного приведення типів можна було використовувати оператор as. (Dog) animal еквівалентно висловом animal as Dog. Різниця між оператором as і явним приведенням лише в тому, що у разі неможливості перетворення, оператор as повертає null, тоді як явне приведення викидає виключення. Приклад програми вище, тільки вже з оператором as:

class Program

{

   static void Main (string [] args)

   {

   List <Animal> animals = new List <Animal> ();

   animals.Add (new Dog ("Барбос"));

   animals.Add (new Cat ("Барсік"));

   animals.Add (new Dog ("Полкан"));

   foreach (Animal animal in animals)

   {

       if (animal is Dog) // перевіряємо чи є дане тварина собакою

         (animal as Dog) .Guard ();

       else (animal as Cat) .CatchMouse ();

   }

   Console.ReadLine ();

   }

}

 

Додати коментар

Захисний код
Оновити

   

Поділіться з друзями

 
   

Сайт для перевірки своїх знань з програмування на сайті:http://www.quizful.net/test

Онлайн тести  для програмістів: https://proghub.ru/


 Розробка сайтів, інтернет-магазинів під ключ. Створення програмного забезпечення для обліку в магазинах,

гуртовнях, ведення власного бізнесу та інших. Написання дипломних та курсових робіт з програмування, баз даних.

 

Звертайтесь за адресою email:kuzbyt@ukr.net

 

 

© (C) Sambir, I.Kuzbyt