logo

Метод розширення в C#

У C#, метод розширення Концепція дозволяє вам додавати нові методи в існуючий клас або структуру, не змінюючи вихідний код оригінального типу, і вам не потрібен будь-який спеціальний дозвіл від оригінального типу, і немає необхідності повторно компілювати оригінальний тип . Він вводиться в C# 3.0 .

Розглянемо цю концепцію на прикладі. Припустімо, у вас є клас або структура, яка містить три методи, і ви хочете додати два нових методи в цей клас або структуру, у вас немає вихідного коду класу/структури або немає дозволів для класу/структури, або клас є закритим класом, але ви все одно хочете додати в нього нові методи, тоді ви можете використовувати метод розширення концепції, щоб додати новий метод до існуючого класу/структури.



знайти в рядку c++

Тепер ви створюєте новий клас, який є статичним і містить два методи, які ви хочете додати до існуючого класу, тепер зв’яжіть цей клас з існуючим класом. Після зв’язування ви побачите, що існуючий клас може отримати доступ до двох нещодавно доданих методів. Як показано в програмі нижче.

приклад:

Спочатку ми створюємо клас під назвою as Виродок в Program1.cs файл. Він містить три методи, тобто M1() , M2() , і M3() .



C#
// C# program to illustrate the concept  // of the extension methods using System; namespace ExtensionMethod { // Here Geek class contains three methods // Now we want to add two more new methods in it // Without re-compiling this class class Geek { // Method 1 public void M1() { Console.WriteLine("Method Name: M1"); } // Method 2 public void M2() { Console.WriteLine("Method Name: M2"); } // Method 3 public void M3() { Console.WriteLine("Method Name: M3"); } } }>

Тепер ми створюємо статичний клас із назвою NewMethodClass у Program2.cs файл. Він містить два методи, які є M4() і M5() . Тепер ми хочемо додати ці методи Виродок класу, тому ми використовуємо параметр прив'язки щоб зв’язати ці методи з класом Geek. Після цього ми створюємо інший GFG, у якому клас Geek має доступ до всіх п’яти методів.>

C#
// C# program to illustrate the concept // of the extension methods using System; namespace ExtensionMethod { // This class contains M4 and M5 method // Which we want to add in Geek class. // NewMethodClass is a static class static class NewMethodClass { // Method 4 public static void M4(this Geek g) { Console.WriteLine("Method Name: M4"); } // Method 5 public static void M5(this Geek g, string str) { Console.WriteLine(str); } } // Now we create a new class in which // Geek class access all the five methods public class GFG { // Main Method public static void Main(string[] args) { Geek g = new Geek(); g.M1(); g.M2(); g.M3(); g.M4(); g.M5("Method Name: M5"); } } }>

Вихід:

Method Name: M1 Method Name: M2 Method Name: M3 Method Name: M4 Method Name: M5>

Важливі моменти:



  • тут, Параметри прив'язки це ті параметри, які використовуються для зв’язування нового методу з існуючим класом або структурою. Він не приймає жодного значення, коли ви викликаєте метод розширення, оскільки вони використовуються лише для зв’язування, а не для будь-якого іншого використання. У списку параметрів методу розширення параметр зв’язування завжди присутній на першому місці, якщо ви пишете параметр зв’язування на другому, чи третьому, чи будь-якому іншому місці, а не на першому місці, компілятор видасть помилку. Параметр прив’язки створюється за допомогою цього ключового слова, за яким іде ім’я класу, до якого потрібно додати новий метод, і ім’я параметра. Наприклад:
    this Geek g>
    тут, це ключове слово використовується для прив’язки, Виродок це ім'я класу, в якому ви хочете прив'язати, і g це ім'я параметра.
  • Методи розширення завжди визначаються як статичні методи, але коли вони пов’язані з будь-яким класом або структурою, вони перетворюються на нестатичні методи.
  • Якщо метод розширення визначено з таким же ім’ям і сигнатурою існуючого методу, то компілятор друкуватиме існуючий метод, а не метод розширення. Іншими словами, метод розширення не підтримується перевизначення методу .
  • Ви також можете додати нові методи в запечатаний клас також використовуючи концепцію методу розширення.
  • Він не може застосовуватися до полів, властивості , або події.
  • Він має бути визначений у статичному класі верхнього рівня.
  • Кілька параметрів прив’язки заборонені, це означає, що метод розширення містить лише один параметр прив’язки. Але ви можете визначити один або кілька звичайних параметрів у методі розширення.

Переваги:

  • Основною перевагою методу розширення є додавання нових методів в існуючий клас без використання успадкування .
  • Ви можете додавати нові методи в існуючий клас, не змінюючи вихідний код існуючого класу.
  • Він також може працювати з запечатаний клас .