Приховування методу С# - Блог ITVDN
ITVDN: курси програмування
Відеокурси з
програмування
УКР
  • РУС
  • УКР

    Вибери свою IT спеціальність

    Підписка
    УКР
    • РУС
    • УКР
    Arrow
    Хочешь доступ ко всем видеокурсам надолго? Выбирай премиум Весенний. Акция до 31 марта
    Arrow

    Приховування методу С#

    advertisement advertisement

    Введение

    В данной статье Вы узнаете, как скрывать метод и как вызывать скрытые элементы базового класса. Рассмотрим это на конкретных примерах.


    Создадим в Visual Studio консольное дополнение с классом Student. У класса Student два поля: FirstName и LastName, и метод, который выводит FirstName и LastName на экране консоли.

    using System;

    namespace methodHidingInCSharp {

           class Student {

                 public string FirstName;

                 public string LastName;

                 public void PrintName() {

                        Console.WriteLine(FirstName + " " + LastName);

                 }

           }

           class Program {

                 static void Main(string[] args) {

                 }

           }

    }

    Создадим класс DiplomaStudent и GraduateStudent, которые унаследуют класс Student.

    using System;

    namespace methodHidingInCSharp {

           class Student {

                 public string FirstName;

                 public string LastName;

                 public void PrintName() {

                        Console.WriteLine(FirstName + " " + LastName);

                 }

           }

           class DiplomaStudent : Student {

           }

           class GraduateStudent : Student {

           }

           class Program {

                 static void Main(string[] args) {

                 }

           }

    }

    Если нужно создать объект класса DiplomaStudent и GraduateStudent, это можно сделать главным методом, например: 

    class Program {

           static void Main(string[] args) {

                 DiplomaStudent ds = new DiplomaStudent();

                 ds.FirstName = "Sam";

                 ds.LastName = "Fisher";

                 ds.PrintName();

                 GraduateStudent gs = new GraduateStudent();

                 gs.FirstName = "Aiden";

                 gs.LastName = "Pearce";

                 gs.PrintName();

           }

    }

    Так как классы DiplomaStudent и GraduateStudent наследуют класс Student, можно вызывать всех участников, кроме частных (приватных).

    При запуске проекта получим следующий результат:

    Результат проекта

    Результат вышел таким, как и предполагалось. Но есть небольшая проблема. Невозможно установить, какой из этих двух результатов DiplomaStudent, а какой – GraduateStudent. Для этого создадим дополнение к имени (studentType)  с указанием Diploma или Graduate. Таким образом, просто смотря на имена, можно определить, какой из них DiplomaStudent, а какой – GraduateStudent.

    Вернемся к проекту. Теперь стоит создать метод PrintName, который будет одинаковым для обоих производных классов, и добавить DiplomaStudent и GraduateStudent, чтоб сделать их более читабельными и понятными.

    class DiplomaStudent : Student {

           public void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName + " - Diploma Student");

           }

    }

    class GraduateStudent : Student {

           public void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName + " - Graduate Student");

           }

    }

    Как известно, тот же метод используется в базовом классе.

    class Student {

           public string FirstName;

           public string LastName;

           public void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName);

           }

    }

    В результате дочерний класс скрывает реализацию базового класса.

    При построении кода появляется зеленая волнистая линия. Если навести курсор мыши на линию, можно увидеть объяснение: если нужно специально скрыть унаследованный член, используйте новое ключевое слово.

    Построение кода

    Чтобы скрыть унаследованный от производного класса член, используйте новое ключевое слово, например:

    class DiplomaStudent : Student {

           public new void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName + " - Diploma Student");

           }

    }

    class GraduateStudent : Student {

           public new void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName + " - Graduate Student");

           }

    }

    Запустите программу:

    Запуск программы

    Результат оправдал ожидания. Рассмотрим, как вызвать метод назад после скрытия. Существует несколько способов.

    Первый – использование основных ключевых слов.

    class DiplomaStudent : Student {

           public new void PrintName() {

                 base.PrintName();

           }

    }

    class GraduateStudent : Student {

           public new void PrintName() {

                 Console.WriteLine(FirstName + " " + LastName + " - Graduate Student");

           }

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

    Реализация базового класса

    Второй способ – превратить тип переменной дочернего класса в базовый класс.

    using System;

    namespace methodHidingInCSharp {

           class DiplomaStudent : Student {

                 public new void PrintName() {

                        Console.WriteLine(FirstName + " " + LastName + " - Diploma Student");

                 }

           }

           class GraduateStudent : Student {

                 public new void PrintName() {

                        Console.WriteLine(FirstName + " " + LastName + " - Graduate Student");

                 }

           }

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

    class Program {

           static void Main(string[] args) {

                 DiplomaStudent ds = new DiplomaStudent();

                 ds.FirstName = "Sam";

                 ds.LastName = "Fisher";

                 re I have type - casted the child class reference variable into a base class

                        ((Student)ds).PrintName();

                 GraduateStudent gs = new GraduateStudent();

                 gs.FirstName = "Aiden";

                 gs.LastName = "Pearce";

                 ((Student)gs).PrintName();

           }

    }

    Запустите программу. 

    Запуск программы

    В предыдущем результате Вы получили базовую реализацию.

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

    class Program {

           static void Main(string[] args) {

                 DiplomaStudent ds = new DiplomaStudent();

                 ds.FirstName = "Sam";

                 ds.LastName = "Fisher";

                 re I have type - casted the child class reference variable into a base class

                        ((Student)ds).PrintName();

                 GraduateStudent gs = new GraduateStudent();

                 gs.FirstName = "Aiden";

                 gs.LastName = "Pearce";

                 ((Student)gs).PrintName();

           }

    }

    Результат тот же.

    Результат программы

    Источник: http://www.c-sharpcorner.com/UploadFile/219d4d/method-hiding-in-C-Sharp/

    КОМЕНТАРІ ТА ОБГОВОРЕННЯ
    advertisement advertisement

    Купуй передплатуз доступом до всіх курсів та сервісів

    Бібліотека сучасних IT знань у зручному форматі

    Вибирай свій варіант підписки залежно від завдань, що стоять перед тобою. Але якщо потрібно пройти повне навчання з нуля до рівня фахівця, краще вибирати Базовий або Преміум. А для того, щоб вивчити 2-3 нові технології, або повторити знання, готуючись до співбесіди, підійде Пакет Стартовий.

    Стартовий
    • Усі відеокурси на 3 місяці
    • Тестування з 10 курсів
    • Перевірка 5 домашніх завдань
    • Консультація з тренером 30 хв
    59.99 $
    Придбати
    Весняний
    • Усі відеокурси на 15 місяців
    • Тестування з 24 курсів
    • Перевірка 20 домашніх завдань
    • Консультація з тренером 120 хв
    90.00 $
    219.99 $
    Придбати
    Акція
    Преміум
    • Усі відеокурси на 12 місяців
    • Тестування з 24 курсів
    • Перевірка 20 домашніх завдань
    • Консультація з тренером 120 хв
    169.99 $
    Придбати
    Notification success