Programmēšana

Kā strādāt ar paplašināšanas metodēm C #

C # programmēšanas valoda nodrošina paplašinājumu metožu atbalstu no C # 3.0. Paplašināšanas metode ir metode, ko izmanto, lai paplašinātu esošo tipu funkcionalitāti, pievienojot metodes, nerada nepieciešamību izveidot jaunus atvasinātus veidus. Jums nav jāizveido esošo klašu apakšklases vai jāpārkompilē vai jāpārveido esošās klases, lai tās darbotos ar paplašināšanas metodēm. Paplašināšanas metodes uzlabo koda lasāmību, vienlaikus ļaujot paplašināt esošo veidu funkcionalitāti.

.Net izplatītās paplašināšanas metodes ietver LINQ standarta vaicājumu operatorus, kas sistēmai pievieno papildu vaicājuma iespējas System.Collections.IEnumerable un System.Collections.Generic.IEnumerable veidi. Ņemiet vērā, ka varat izmantot paplašināšanas metožu priekšrocības, lai paplašinātu klasi vai saskarni, taču jūs nevarat ignorēt to metodes. MSDN norāda: "Paplašināšanas metodes ļauj jums" pievienot "metodes esošajiem tipiem, neveidojot jaunu atvasinātu tipu, atkārtoti nekompilējot vai citādi nemodificējot sākotnējo tipu. Paplašināšanas metodes ir īpaša statiskas metodes veids, taču tās tiek izsauktas tā, it kā bija paplašinātā tipa eksemplāru metodes. "

Būtībā paplašināšanas metode ir īpašs statiskās metodes veids un ļauj jums pievienot funkcionalitāti esošam tipam, pat ja jums nav piekļuves veida avota kodam. Paplašināšanas metode ir gluži kā cita statiska metode, taču tās pirmais parametrs ir atsauce “šis”. Jebkuram tipam varat pievienot tik daudz paplašināšanas metožu, cik vēlaties. Vissvarīgākais ir tas, ka pat vērtības tipam varat pievienot paplašināšanas metodes.

Strādājot ar paplašināšanas metodēm, ņemiet vērā šos aspektus:

  • Paplašināšanas metodei jābūt statiskai
  • Paplašinājuma metodei jābūt statiskās klases iekšpusē - klasei var būt jebkurš nosaukums
  • Paplašinājuma metodes parametrā vienmēr jābūt atslēgvārdam "šis", kas atrodas pirms tipa, uz kuru metode jāizsauc

Ņemiet vērā, ka tā definējat paplašinājuma metodi tipam, kuram ir tāds pats paraksts kā jebkurai citai paplašinātā veida metodei, paplašināšanas metodi nekad neizsauks.

Paplašinājuma metožu programmēšana C #

Šajā sadaļā mēs izpētīsim, kā programmēt paplašināšanas metodes, izmantojot C #. Šis kodu saraksts parāda, kā izskatās paplašinājuma metode.

publiskā statiskā klase StringExtensions

    {

public static bool IsNumeric (šī virknes virkne)

        {

dubultā izeja;

atgriezties divreiz.TryParse (str, out output);

        }

    }

Ņemiet vērā paplašinājuma metodes pirmo parametru. Kā jau tika apspriests, jebkurai paplašinājuma metodei jābūt statiskai, un pirms šī parametra, kuram vēlaties izsaukt metodi, jābūt atslēgvārdam "šis". Norādot parametru sarakstā atslēgvārdu "šis" tā, kā tas parādīts iepriekšējā piemērā, jūs informējat kompilatoru, ka virkņu klasei ir definēta paplašinājuma metode.

Lūk, kā virknes instancē var izmantot paplašināšanas metodi IsNumeric.

static void Main (virkne [] args)

        {

virkne str = "100";

ja (str.IsNumeric ())

Console.WriteLine ("Virknes objektā ar nosaukumu str ir skaitliska vērtība.");

Konsole. Lasīt ();

        }

Izpildot iepriekš minēto programmu, konsoles logā tiek parādīts ziņojums ("Virknes objektā ar nosaukumu str ir skaitliska vērtība."

Varat izmantot paplašināšanas metodes, lai tipam ievadītu jaunu funkcionalitāti, izmantojot metožu nepieciešamību mainīt, atvasināt vai atkārtoti kompilēt sākotnējo tipu. Kā jau minēju iepriekš, paplašinājumu metodes var piemērot arī vērtību tipiem. Apskatīsim, kā to var panākt ar piemēru.

Nākamajā klasē, kuras nosaukums ir IntegerExtensions, ir paplašinājuma metode IsEven, kas atgriež vērtību true, ja veselais skaitlis, uz kuru tas tiek izsaukts, ir pat, citādi nepatiesa.

publiskā statiskā klase IntegerExtensions

    {

publiskā statiskā būla IsEven (šī int i)

        {

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

        }

    }

Lūk, kā paplašinājuma metodi IsEven var izmantot veselam skaitlim.

int n = 2;

ja (n.IsEven ())

Console.WriteLine ("Vesela skaitļa vērtība ir pat.");

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