Kako raditi s metodama produženja u C #

Programski jezik C # pruža podršku za metode proširenja iz C # 3.0. Metoda proširenja je ona koja se koristi za proširenje funkcionalnosti postojećih tipova dodavanjem metoda bez potrebe za stvaranjem novih izvedenih tipova. Ne trebate stvarati potklase postojećih klasa ili rekompajlirati ili mijenjati postojeće klase da biste radili s metodama proširenja. Metode proširenja poboljšavaju čitljivost vašeg koda, a istovremeno vam omogućuju proširenje funkcionalnosti postojećih vrsta.

Uobičajene metode proširenja u .Net-u uključuju standardne operatore upita LINQ koji System.Collections.IEnumerable and System.Collections.Generic.IEnumerabletipovima dodaje dodatne mogućnosti upita . Imajte na umu da možete iskoristiti metode proširenja za proširenje klase ili sučelja, ali ne možete poništiti njihove metode. MSDN navodi: "Metode proširenja omogućuju vam dodavanje metoda postojećim vrstama bez stvaranja novog izvedenog tipa, ponovnog prevođenja ili modificiranja izvornog tipa. Metode proširenja su posebna vrsta statičke metode, ali nazivaju se kao da su bile instance instance na proširenom tipu. "

U osnovi, metoda proširenja je posebna vrsta statičke metode i omogućuje vam dodavanje funkcionalnosti postojećem tipu čak i ako nemate pristup izvornom kodu tog tipa. Metoda proširenja je poput druge statične metode, ali kao prvi parametar ima referencu "this". Bilo kojoj vrsti možete dodati koliko god želite metoda. Što je najvažnije, možete dodati metode proširenja čak i vrsti vrijednosti.

Kada radite s metodama produženja, imajte na umu ove točke:

  • Metoda produženja mora biti statička metoda
  • Metoda proširenja mora biti unutar statičke klase - klasa može imati bilo koje ime
  • Parametar u metodi proširenja uvijek treba imati ključnu riječ "this" koja prethodi tipu na koji treba pozvati metodu

Imajte na umu da ako definirate metodu proširenja za tip koji ima isti potpis kao i bilo koja druga metoda tipa koji proširujete, metoda proširenja nikada neće biti pozvana.

Programiranje metoda produženja u C #

U ovom ćemo odjeljku istražiti kako programirati metode proširenja pomoću C #. Sljedeći popis kodova ilustrira kako izgleda metoda produženja.

public static class StringExtensions

    {

        public static bool IsNumeric(this string str)

        {

            double output;

            return double.TryParse(str, out output);

        }

    }

Obratite pažnju na prvi parametar metode produženja. Kao što je već rečeno, bilo koja metoda proširenja trebala bi biti statična i trebala bi imati ključnu riječ "this" koja prethodi parametru za koji želite da se metoda poziva. Kada na popisu parametara navedete ključnu riječ "this" onako kako je to prikazano u gornjem primjeru, obavještavate prevoditelja da je za klasu niza definirana metoda proširenja.

Evo kako možete koristiti metodu proširenja IsNumeric na instanci niza.

static void Main(string[] args)

        {

            string str = "100";

            if (str.IsNumeric())

                Console.WriteLine("The string object named str contains numeric value.");

            Console.Read();

        }

Kada izvršite gornji program, u prozoru konzole prikazuje se poruka ("Objekt niza pod nazivom str sadrži numeričku vrijednost."

Možete koristiti metode proširenja za ubrizgavanje nove funkcionalnosti putem metoda tipu bez potrebe za izmjenom, izvođenjem ili ponovnim kompiliranjem izvornog tipa. Kao što sam ranije spomenuo, metode proširenja mogu se primijeniti i na vrste vrijednosti. Pogledajmo kako se to može postići na primjeru.

Sljedeća klasa pod nazivom IntegerExtensions sadrži metodu proširenja pod nazivom IsEven koja vraća true ako je cijeli broj na koji je pozvan paran, inače false.

public static class IntegerExtensions

    {

        public static bool IsEven(this int i)

        {

            return ((i % 2) == 0);

        }

    }

Evo i načina na koji možete koristiti metodu proširenja IsEven na cijelom broju.

int n = 2;

if(n.IsEven())

 Console.WriteLine("The value of the integer is even.");