Stanislav Gerasimov 08 ΠΌΠ°Ρ€Ρ‚Π° 2022

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрим основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования, ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ аспСкты Π½Π° языкС C#, Π±Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ совсСм ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ.
πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ООП

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строится Π½Π° написании ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², содСрТащих ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.

ООП основано Π½Π° использовании Ρ‚Ρ€Ρ‘Ρ… основных ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ²:

  1. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ – это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ΄ класса (поля, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… участков ΠΊΠΎΠ΄Π°.
  2. НаслСдованиС – это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ классу Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ свойства Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса, принимая всС поля ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.
  3. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ – это свойство, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ интСрфСйс для ΠΎΠ±Ρ‰Π΅Π³ΠΎ класса дСйствий. Π­Ρ‚Π° концСпция часто выраТаСтся ΠΊΠ°ΠΊ "ΠΎΠ΄ΠΈΠ½ интСрфСйс, нСсколько дСйствий".

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ряд прСимущСств ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, основными ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ: быстродСйствиС ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ использованиС ΠΊΠΎΠ΄Π°.

ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

Π―Π·Ρ‹ΠΊ C# являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования, это позволяСт Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Ρ‘ΠΌ большиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ систСмы, с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½ΠΎΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.

Π’ C# классы ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±Π°Π·ΠΎΠ²Ρ‹ΠΌΠΈ инструмСнтами для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ООП. НапримСр, смартфон – это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ диагональ экрана, установлСнный процСссор, Ρ†Π²Π΅Ρ‚ корпуса ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран, ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ°/принятиС Π·Π²ΠΎΠ½ΠΊΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

C# ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ описаниС, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ использованиС классов Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½ΠΎ. Π‘ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Π§Π»Π΅Π½Ρ‹ класса: поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Для добавлСния класса Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² Π΅Π³ΠΎ контСкстном мСню Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ Add new item/Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт ΠΈ Π² появившСмся ΠΎΠΊΠ½Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ – Class/Класс ΠΈ Π²Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ имя.

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан Ρ„Π°ΠΉΠ» .cs с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса Phone. Π’ Π½Ρ‘ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ объявлСн класс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова class ΠΈ объявлСниС класса ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄:

        class Phone
{
    public string manufacturer;
    public string model;
    public double screenSize;

    public void unlockDisplay()
    {
        Console.WriteLine("Π­ΠΊΡ€Π°Π½ Ρ€Π°Π·Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½");
    }
}
    

Класс ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя поля (fields) – ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρƒ класса Phone Π΅ΡΡ‚ΡŒ Π΄Π²Π° поля ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄. Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования класса.

        using System;

namespace SimpleOOP
{
    class Program
    {
        static void Main()
        {
            Phone apple = new Phone();
            apple.manufacturer = "Apple";
            apple.model = "IPhone 13";
            apple.screenSize = 5.8;

            Phone samsung = new Phone();
            samsung.manufacturer = "Samsung";
            samsung.model = "Galaxy S21";
            samsung.screenSize = 6.5;

            Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + apple.manufacturer + " " + apple.model);
            apple.unlockScreen();
            Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + samsung.manufacturer + " " + samsung.model);
            samsung.blockScreen();

            Console.ReadKey();
        }
    }
}

    

Поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса, Π² нашСм случаС ΠΎΠ½ΠΈ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ public, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (класс Program). Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ new Phone().

Π’ консоль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ значСния ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса. Но для Π±ΠΎΠ»Π΅Π΅ эффСктивного программирования классов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ конструкторы.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΡˆΠ°Ρ€ΠΏΠΈΡΡ‚Π°Β»

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ – ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ имя класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ вызываСтся ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎΠ»Π΅ΠΉ.

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ конструкторов:

  • конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²;
  • ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ конструктор;
  • конструктор ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ создаСтся Π² языкС C#, Ссли Π² классС Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ конструкторы.

Имя конструктора Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ класса ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ класс Phone, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ конструктор Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ:

        class Phone
    {
        public string manufacturer;
        public string model;

        public Phone()
        {
            manufacturer = "Apple";
            model = "IPhone X";
        }

        public Phone(string manufacturer, string model)
        {
            this.manufacturer = manufacturer;
            this.model = model;
        }
    }
    class Program
    {
        static void Main()
        {
            Phone apple = new Phone();

            Phone samsung = new Phone("Samsung","Galaxy S20 Ultra");

            Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + apple.manufacturer + " " + apple.model);
            Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + samsung.manufacturer + " " + samsung.model);
            
            Console.ReadKey();
        }
    }

    

Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ класс Phone содСрТит Π΄Π²Π° конструктора, поэтому Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ разная инициализация, apple Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния ΠΈΠ· конструктора. Для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° samsung ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ конструктор с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ доступа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для установки уровня доступа/видимости для классов, ΠΏΠΎΠ»Π΅ΠΉ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ свойств. К ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ доступа относятся Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, ΠΊΠ°ΠΊ public, private, protected ΠΈ internal, Ρ€Π°Π½Π΅Π΅ использовался Π½Π°ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ public.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ОписаниС
public Код доступСн для всСх классов
private Код доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса
Protected Код доступСн Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ Π² классС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ этого класса
Internal Код доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… собствСнной сборки, Π½ΠΎ Π½Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ сборки

Если ΠΌΡ‹ объявим поля нашСго класса Phone ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΊΠ°ΠΊ private, Ρ‚ΠΎ ΠΎΠ½ΠΈ станут нСдоступны для использования Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… классах, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Program. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΈ являСтся основой ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° ООП – инкапсуляции.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΈ свойства

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ позволяСт ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этого, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ:

  • ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ поля/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ private;
  • ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ public get ΠΈ set ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ‡Π΅Ρ€Π΅Π· свойства для доступа ΠΈ измСнСния значСния private поля.

Доступ ΠΊ private ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ класса. Иногда Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ доступ Π²Π½Π΅ класса – ΠΈ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ свойств.

Бвойство ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π°: get() ΠΈ set().

        class Phone
    {
        private string manufacturer;
        private string model;
        public string Manufacturer
        {
            get { return manufacturer; }   
            set { manufacturer = value; } 
        }
        public string Model 
        {
            get { return model; }
            set { model = value; }
        }

    }
    class Program
    {
        static void Main()
        {
            Phone apple = new Phone();
            apple.Manufacturer = "Apple";
            apple.Model = "IPhone";

            Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + apple.Manufacturer + " " + apple.Model);
            
            Console.ReadKey();
        }
    }

    

Бвойства, Manufacturer ΠΈ Model связаны с полями manufacturer ΠΈ model соотвСтствСнно.

РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ имя ΠΊΠ°ΠΊ для свойства, Ρ‚Π°ΠΊ ΠΈ для частного поля, Π½ΠΎ с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π±ΡƒΠΊΠ²ΠΎΠΉ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС.

ΠœΠ΅Ρ‚ΠΎΠ΄ get() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠœΠ΅Ρ‚ΠΎΠ΄ set() присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово value прСдставляСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ присваиваСм свойству.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния свойств Π²Π½Π΅ класса ΠΈΡ… содСрТащим. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Поля ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ доступными Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ get() ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для записи, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ set().

C# позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскиС свойства, Π³Π΄Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»Π΅ для свойства, Π° достаточно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ get; ΠΈ set; Π²Π½ΡƒΡ‚Ρ€ΠΈ свойства. ИзмСнив класс Phone, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

        class Phone
    {
        public string Manufacturer
        {
            get; set;
        }
        public string Model 
        {
            get; set;
        }

    }

    

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² консоли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ класса ΠΈ сниТаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ поврСТдСния ΠΊΠΎΠ΄Π°.

НаслСдованиС

Π’ C# поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. Π’ наслСдовании ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²Π° понятия:

  1. Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ класс – класс, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ наслСдуСтся.
  2. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΉ класс – класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ класса.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ класс Smartphone наслСдуСт поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚ класса Phone:

        class Phone
{
    public string manufacturer = "Apple";
    public string model = "IPhone XR";

    public void print()
    {
        Console.WriteLine("ΠœΠΈΡ€ Apple!");
    }

}

class Smartphone : Phone
{
    public string color = "Red";

}
class Program
{
    static void Main()
    {
        Smartphone apple = new Smartphone();

        apple.print();

        Console.WriteLine("Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½: " + apple.manufacturer + " " + apple.model + "\nΠ¦Π²Π΅Ρ‚ корпуса: " + apple.color);
        
        Console.ReadKey();
    }
}
    

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°, класс Smartphone наслСдуСт ΠΎΡ‚ класса Phone поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Smartphone(). Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π½ΠΈΠΆΠ΅:

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс Smartphone ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ унаслСдовал ΠΎΡ‚ класса Phone поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄.

НаслСдованиС позволяСт сущСствСнно ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ объСм ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅ трСбуСтся повторная рСализация участков ΠΊΠΎΠ΄Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… классах.

ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌΠ° позволяСт ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ классов ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ ΠΎΠ΄Π½Ρƒ, Π° нСсколько Ρ„ΠΎΡ€ΠΌ, ΠΈ ΠΎΠ½ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ классов, связанных Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡƒΡ‚Π΅ΠΌ наслСдования.

Как Π±Ρ‹Π»ΠΎ сказано Π²Ρ‹ΡˆΠ΅, наслСдованиС позволяСт Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ дСйствиС Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами.

НапримСр, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ класс Device, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ enabledScreen(). ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌΠΈ классами устройств ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ смартфоны, ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚Ρ‹ ΠΈ Ρƒ Π½ΠΈΡ… Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ собствСнная рСализация Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π° экран:

        class Device  
{
    public virtual void enableScreen()
    {
        Console.WriteLine("Screen Enabled!");
    }
}

class Phone : Device   
{
    public override void enableScreen()
    {
        Console.WriteLine("Hello, I am Phone!");
    }
}

class Tablet : Device
{
    public override void enableScreen()
    {
        Console.WriteLine("Hello, I am Tablet!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Device device = new Device();
        Phone phone = new Phone();
        Tablet tablet = new Tablet();

        device.enableScreen();
        phone.enableScreen();
        tablet.enableScreen();
    }
}
    

Π’ Π±Π°Π·ΠΎΠ²ΠΎΠΌ классС объявлСн ΠΌΠ΅Ρ‚ΠΎΠ΄ screenEnabled(), ΠΊΠ°ΠΊ virtual. Π’ классах наслСдниках, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово override, ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса ΠΏΠΎ-своСму.

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ВсС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ свои ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, благодаря ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅.

АбстрактныС классы ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹

Абстракция Π΄Π°Π½Π½Ρ‹Ρ… – это процСсс сокрытия ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈ ΠΏΠΎΠΊΠ°Π·Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Абстракция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнута Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ абстрактных классов, Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ интСрфСйсов.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово abstract ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²:

  • абстрактный класс – это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (для доступа ΠΊ Π½Π΅ΠΌΡƒ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ унаслСдован ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ класса);
  • абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄: ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² абстрактном классС ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π»Π°. Π’Π΅Π»ΠΎ прСдоставляСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ классом.

Абстрактный класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊ абстрактныС, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ абстрактных классов нСльзя. Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ класс наслСдник.

Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

        abstract class Device  
{
    public abstract void enableScreen();
    public virtual void powerOff()
    {
        Console.WriteLine("Device Disabled!");
    }
}

class Phone : Device   
{
    public override void enableScreen()
    {
        Console.WriteLine("Hello, I am Phone!");
    }
}

class Tablet : Device
{
    public override void enableScreen()
    {
        Console.WriteLine("Hello, I am Tablet!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Phone phone = new Phone();
        Tablet tablet = new Tablet();

        phone.enableScreen();
        phone.powerOff();
        tablet.enableScreen();
        tablet.powerOff();
    }
}
    

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс Device Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ абстрактный ΠΈ Π΅Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ. Но унаслСдованныС ΠΎΡ‚ Π½Π΅Π³ΠΎ классы Phone ΠΈ Tablet Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π‘ΠΎΠ»ΡŒΡˆΠ΅ΠΉ абстракции ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйсы.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹

Π’ C# ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ абстракции, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ интСрфСйсы. Interface – это ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ абстрактный класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ абстрактныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ свойства (Π±Π΅Π· Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ). ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ имя интСрфСйса с Π±ΡƒΠΊΠ²Ρ‹ I, Ρ‚Π°ΠΊ Π»Π΅Π³Ρ‡Π΅ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это интСрфСйс, Π° Π½Π΅ класс. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‡Π»Π΅Π½Ρ‹ интСрфСйса ΡΠ²Π»ΡΡŽΡ‚ΡΡ abstract ΠΈ public.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½ΠΎ Π½Π΅ поля.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ интСрфСйса, интСрфСйс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ классС. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ : символ (Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ с наслСдованиСм). Π’Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° интСрфСйса прСдоставляСтся классом Β«Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ». ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово override ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса:

        interface IDevice  
{
    void enableScreen();
}

class Phone : IDevice   
{
    public void enableScreen()
    {
        Console.WriteLine("Hello, I am Phone!");
    }
}

class Tablet : IDevice
{
    public void enableScreen()
    {
        Console.WriteLine("Hello, I am Tablet!");
    }
}

class Program
{
    static void Main(string[] args)
    {
        Phone phone = new Phone();
        Tablet tablet = new Tablet();

        phone.enableScreen();
        tablet.enableScreen();
    }
}
    

ИспользованиС интСрфСйса Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ большСго уровня абстракции.

Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΌΡ‹ рассмотрСли основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для понимания Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… классов ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ.

ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ части самоучитСля Π±Ρ‹Π»ΠΈ рассмотрСны ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈ ΠΈΡ… рСализация Π² C#, Π½ΠΎ массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ динамичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с динамичСскими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ динамичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ… Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ/ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ ΠΈΠΌΡ‘Π½ System.Collections.Generic Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ для ΡˆΠΈΡ€ΠΎΠΊΠΎΠ³ΠΎ спСктра Π·Π°Π΄Π°Ρ‡. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…: List<T> ΠΈ Dictoniary<T,V>.

Бписок

List<T> – список.

Бписок ΠΏΠΎ структурС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ динамичСского Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. ΠŸΡ€ΠΈ объявлСнии списка ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ встроСнный ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

Бинтаксис объявлСния пустого списка, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

List<Type> list = new List<Type>();

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² скобках Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ списка:

List<Type> list = new List<Type> (25);

МоТно сразу ΠΏΡ€ΠΈ объявлСнии ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ, Π΄ΠΎΠ±Π°Π²ΠΈΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, строковыС элСмСнты:

List<string> names = new List<string> {β€œMichael”, β€œStefan”, β€œMary”};

Π£ класса List ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свойства, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со списком:

  • Count – ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ количСство элСмСнтов списка;
  • Capacity – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‘Ρ‚ количСство элСмСнтов, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ список ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π±Π΅Π· измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π°;
  • Item[int32] – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π΅Ρ‚ элСмСнт ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ индСксу.

Π˜ΠΌΠ΅ΡŽΡ‚ΡΡ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ списком, пСрСчислим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  • Add(T) – добавляСт элСмСнт ΠΊ списку;
  • Clear() – очистка списка;
  • IndexOf(T) – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ элСмСнта;
  • ElementAt(Int32) – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ элСмСнт ΠΏΠΎ индСксу;
  • Insert(Int32, T) – вставляСт элСмСнт Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ;
  • Remove(T) – удаляСт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ элСмСнт ΠΈΠ· списка;
  • RemoveAt(Int32) – удаляСт элСмСнт ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ;
  • Sort() – сортируСт список;
  • Reverse() – мСняСт порядок располоТСния элСмСнтов Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ.

НиТС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ рассмотрим использованиС ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса List:

        class Phone
{
    public string Manufacturer { get; set; }
    public string Model { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        List<Phone> phones = new List<Phone> {
            new Phone { Manufacturer = "Apple", Model = "IPhone X"},
            new Phone { Manufacturer = "Microsoft", Model = "Lumia 535"},
            new Phone{ Manufacturer ="Samsung", Model = "Galaxy S20"}
    };
        Console.WriteLine("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов Π² phones:{0}", phones.Count);
        //Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт списка players
        phones.Insert(1, new Phone { Manufacturer = "Huawei", Model = "Mate X" });
        //ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° всС элСмСнты списка
        phones.ForEach(p => Console.WriteLine($"{p.Manufacturer}, {p.Model}"));
        //Π£Π΄Π°Π»ΠΈΠΌ элСмСнт ΠΈΠ· списка ΠΏΠΎ индСксу
        phones.RemoveAt(3);
        // ΠŸΠ΅Ρ€Π΅Π²Π΅Ρ€Π½Π΅ΠΌ список
        phones.Reverse();
        Console.WriteLine("--------------------");
        foreach (Phone phone in phones)
        {
            Console.WriteLine($"{phone.Manufacturer} {phone.Model}");
        }


    }
}
    

РассмотрСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ List, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½ΠΈΠΆΠ΅:

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π‘ΠΎΠ·Π΄Π°Π»ΠΈ список с элСмСнтами, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт, ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠΎ индСксу, ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΠ»ΠΈ список Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. Π‘ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ

Dictoniary<T, V> – ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

Класс Dictionary Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ Ассоциативный массив. ИдСя довольно проста: Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ массивС доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‡Π΅Ρ€Π΅Π· цСлочислСнный индСкс, Π° Π² словарС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ числом, строкой ΠΈΠ»ΠΈ Π»ΡŽΠ±Ρ‹ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetHashCode(). ΠŸΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ‚Π°ΠΊΡƒΡŽ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡŽ для Π½Π΅Π³ΠΎ указываСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ доступа ΠΊ Π½Π΅ΠΌΡƒ.

ΠŸΡƒΡΡ‚ΠΎΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

        var dict = new Dictionary<string, float>();
    

Π‘Π»ΠΎΠ²Π°Ρ€ΡŒ с Π½Π°Π±ΠΎΡ€ΠΎΠΌ элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ:

        var numbers = new Dictionary<string, int>() 
{
["one"] = 1,
["two"] = 2,
["three"] = 3
};
Console.WriteLine($"one : {numbers["one"]}");

    

Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Dictionary<TKey, TValue>. Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со всСми возмоТностями класса ΠΌΠΎΠΆΠ½ΠΎ Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ сайтС Microsoft.

Бвойства класса Dictionary:

  • Count – количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² словарС;
  • Keys – ΠΊΠ»ΡŽΡ‡ΠΈ словаря;
  • Values – значСния элСмСнтов словаря.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Dictoniary:

  • Add(TKey, TValue) – добавляСт Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ элСмСнт с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ;
  • Clear() – удаляСт ΠΈΠ· словаря всС ΠΊΠ»ΡŽΡ‡ΠΈ ΠΈ значСния;
  • ContainsValue(TValue) – провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² словарС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ значСния;
  • ContainsKey(TKey) – провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² словарС ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π°;
  • GetEnumerator() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° элСмСнтов словаря;
  • Remove(TKey) – удаляСт элСмСнт с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ;
  • TryAdd(TKey, TValue) – ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ элСмСнт с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ;
  • TryGetValue(TKey, TValue) – ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ.

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅ рассмотрим Ρ€Π°Π±ΠΎΡ‚Ρƒ со словарём:

        using System;

namespace SimpleOOP
{
    class Program
    {
        static void Main(string[] args)
        {
            
            Dictionary<string, string> phoneList = new Dictionary<string, string>();
            phoneList.Add("Иван Π“ΠΎΡ€", "+79856340978");
            phoneList.Add("ОлСся ΠœΠ°Ρ€ΡŒΠΈΠ½Π°", "+79206318537");
            phoneList.Add("Максим Π₯русталСв", "+74998006644");
            
            Console.WriteLine("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСлСмСнтов: {0}", phoneList.Count);

            phoneList["Илькин Π—Π°ΠΏΠ°ΡˆΠ½Ρ‹ΠΉ"] = "+79098576432";
            if (!phoneList.ContainsKey("Максим Π₯русталСв"))
            {
                phoneList["Максим Π₯русталСв"] = "+79456882321";
            }
            if (!phoneList.ContainsValue("+79098576432"))
            {
                Console.WriteLine("Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½!");
            }
            
            Console.WriteLine("Π’Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² Ρ‚Π΅Π».ΠΊΠ½ΠΈΠ³ΠΈ:");
            foreach (KeyValuePair<string, string> author in phoneList)
            {
                Console.WriteLine("ΠšΠ»ΡŽΡ‡: {0}, Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: {1}", author.Key, author.Value);
            }
            
            phoneList.Remove("ОлСся ΠœΠ°Ρ€ΡŒΠΈΠ½Π°");
           
            phoneList.Clear();

        }
    }
}

    

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ выполнСния Π² консоль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

πŸ‘¨β€πŸŽ“οΈ Π‘Π°ΠΌΠΎΡƒΡ‡ΠΈΡ‚Π΅Π»ΡŒ ΠΏΠΎ C# для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π·Π° 30 ΠΌΠΈΠ½ΡƒΡ‚. Π§Π°ΡΡ‚ΡŒ 2: ООП ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ использованиС основных свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса Dictoniary.

На этом ΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ООП ΠΈ Π² дальнСйшСм ΠΈΡ… ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅.

***

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ C++
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•