Ohjelmointi

Kuinka työskennellä laajennusmenetelmien kanssa C #: ssä

C # -ohjelmointikieli tukee laajennusmenetelmiä C # 3.0: sta. Laajennusmenetelmää käytetään laajentamaan olemassa olevien tyyppien toiminnallisuutta lisäämällä menetelmiä ilman tarvetta luoda uusia johdettuja tyyppejä. Sinun ei tarvitse luoda olemassa olevien luokkien alaluokkia tai kääntää tai muokata olemassa olevia luokkia toimimaan laajennusmenetelmien kanssa. Laajennusmenetelmät parantavat koodisi luettavuutta ja mahdollistavat samalla nykyisten tyyppien toiminnallisuuden laajentamisen.

.Net: n yleiset laajennusmenetelmät sisältävät LINQ-standardi kyselyoperaattorit, jotka lisäävät kyselyyn lisäominaisuuksia System.Collections.IEnumerable ja System.Collections.Generic.IEnumerable tyypit. Huomaa, että voit hyödyntää laajennusmenetelmiä luokan tai käyttöliittymän laajentamiseksi, mutta et voi ohittaa niiden menetelmiä. MSDN: n mukaan "Laajennusmenetelmien avulla voit" lisätä "menetelmiä olemassa oleviin tyyppeihin luomatta uutta johdettua tyyppiä, kääntämättä uudelleen tai muuten muuttamatta alkuperäistä tyyppiä. Laajennusmenetelmät ovat erityinen staattinen menetelmä, mutta niitä kutsutaan ikään kuin ne olivat esimerkkitapoja laajennetulle tyypille. "

Pohjimmiltaan laajennusmenetelmä on erityinen staattisen menetelmän tyyppi, ja sen avulla voit lisätä toiminnallisuutta olemassa olevaan tyyppiin, vaikka sinulla ei ole pääsyä tyypin lähdekoodiin. Laajennusmenetelmä on aivan kuten toinen staattinen menetelmä, mutta sen ensimmäinen parametri on "tämä" -viite. Voit lisätä mihin tahansa tyyppiin niin monta laajennusmenetelmää kuin haluat. Mikä tärkeintä, voit myös lisätä laajennusmenetelmiä jopa arvotyyppiin.

Kun työskentelet laajennusmenetelmien kanssa, pidä mielessä nämä seikat:

  • Laajennusmenetelmän on oltava staattinen menetelmä
  • Laajennusmenetelmän on oltava staattisen luokan sisällä - luokassa voi olla mikä tahansa nimi
  • Laajennusmenetelmän parametrissa tulisi aina olla "tämä" avainsana ennen tyyppiä, jolle menetelmä on kutsuttava

Huomaa, että määrität laajennusmenetelmän tyypille, jolla on sama allekirjoitus kuin kaikilla muilla laajentamallasi menetelmillä, laajennusmenetelmää ei koskaan kutsuta.

Laajennusmenetelmien ohjelmointi C #: ssä

Tässä osiossa tutkitaan, miten laajennusmenetelmät ohjelmoidaan C #: lla. Seuraava koodiluettelo kuvaa, kuinka laajennusmenetelmä näyttää.

julkinen staattinen luokka StringExtensions

    {

public staattinen bool IsNumeric (tämä merkkijono str)

        {

tuplalähtö;

return double.TryParse (str, out output);

        }

    }

Huomaa ensimmäinen parametri laajennusmenetelmälle. Kuten jo keskusteltiin, minkä tahansa laajennusmenetelmän tulisi olla staattinen ja siinä tulisi olla "tämä" avainsana ennen parametria, johon haluat kutsua menetelmää. Kun määrität "tämän" avainsanan parametriluetteloon samalla tavalla kuin se on esitetty yllä olevassa esimerkissä, ilmoitat kääntäjälle, että merkkijonoluokalle on määritetty laajennusmenetelmä.

Näin voit käyttää laajennusmenetelmää IsNumeric merkkijono-ilmentymässä.

staattinen void Main (merkkijono [] args)

        {

merkkijono str = "100";

jos (str.IsNumeric ())

Console.WriteLine ("str-niminen merkkijono-objekti sisältää numeerisen arvon.");

Konsoli.Lue ();

        }

Kun suoritat yllä olevan ohjelman, sanoma ("str-niminen merkkijono-objekti sisältää numeerisen arvon" näkyy konsoli-ikkunassa.

Voit käyttää laajennusmenetelmiä injektoidaksesi uutta toiminnallisuutta menetelmien avulla tyypille, ei tarvitse muuttaa, johtaa tai kääntää uudelleen alkuperäistä tyyppiä. Kuten aiemmin mainitsin, laajennusmenetelmiä voidaan soveltaa myös arvotyyppeihin. Katsotaanpa, miten tämä voidaan saavuttaa esimerkillä.

Seuraava luokka nimeltä IntegerExtensions sisältää IsEven-nimisen laajennusmenetelmän, joka palauttaa arvon true, jos kokonaisluku, johon sitä kutsutaan, on tasainen, muuten epätosi.

julkinen staattinen luokka IntegerExtensions

    {

julkinen staattinen bool IsEven (tämä int i)

        {

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

        }

    }

Ja näin voit käyttää laajennusmenetelmää IsEven kokonaisluvulla.

int n = 2;

jos (n.IsEven ())

Console.WriteLine ("Kokonaisluvun arvo on tasainen.");

$config[zx-auto] not found$config[zx-overlay] not found