Programovanie

Ako používať spravované ukazovatele v C #

Ukazovateľ je premenná, ktorá smeruje na adresu inej premennej. Inými slovami, ukazovateľ obsahuje adresu pamäte inej premennej alebo umiestnenie v pamäti. Až donedávna bolo jediným spôsobom, ako pracovať s ukazovateľmi v C #, použitie nebezpečného kódu. Mohli by ste využiť výhody nebezpečné kľúčové slovo, aby ste definovali nebezpečný kontext a potom vytvorili nespravované ukazovatele alebo vyvolali natívne funkcie pomocou nespravovaných ukazovateľov.

Tu je potrebné poznamenať, že nebezpečný kód znamená kód, ktorý sa vykonáva mimo kontextu CLR. Je to nespravovaný kód. Pretože však predvolene vypínate zabezpečenie poskytované produktom CLR, je vhodné používať nebezpečný kód, iba ak viete, ako funguje správa pamäte v .Net.

Odkaz na objekt v C # je ukazovateľ bezpečný pre typ, ktorý ukazuje na začiatok objektu. V CLR existuje iný typ ukazovateľa známy ako spravovaný ukazovateľ. Tento článok skúma, čo sú spravované ukazovatele, prečo sú užitočné a ako s nimi môžeme pracovať v C #.

Vysvetlené sú spravované ukazovatele v jazyku C #

Spravovaný ukazovateľ sa líši od ukazovateľa bezpečného pre typ tým, že dokáže ukazovať na iné miesta objektu, t. J. Nielen na začiatok objektu. Rovnako ako referencia na objekt, aj spravovaný ukazovateľ môže ukazovať na objekty uložené v spravovanej halde. Rozdiel je v tom, že zatiaľ čo referencia na objekt ukazuje na začiatok objektu, spravovaný ukazovateľ môže ukazovať na parametre metódy, polia, prvky poľa alebo na inú časť objektu.

Spravovaný ukazovateľ môže v podstate smerovať na toto:

  • lokálna premenná
  • prvok poľa
  • parameter metódy
  • pole zloženého typu

Spravované ukazovatele priamo nepodporujú aritmetiku ukazovateľa. Hodnoty adries, na ktoré smerujú, nemôžete „pridať“ ani „odčítať“. Hodnotu spravovaného ukazovateľa nemôžete označiť. Zdá sa, že práve kvôli týmto obmedzeniam nie sú spravované ukazovatele v jazyku C # explicitne vystavené. Spravované ukazovatele sú však v C # dlho implicitné ako referenčné parametre. Keď odovzdávate parameter metóde odkazom, používate v zákulisí spravovaný ukazovateľ.

10 pravidiel pre používanie spravovaných ukazovateľov v C #

Pri spravovaných ukazovateľoch si všimnite nasledujúce body.

  1. Spravované ukazovatele nemôžu mať hodnotu null.
  2. Nie je možné, aby spravovaný ukazovateľ smeroval na iného spravovaného ukazovateľa.
  3. Spravované ukazovatele nemôžu byť na halde.
  4. Spravovaný ukazovateľ nemôžete zameniť s odkazom na objekt.
  5. Spravované ukazovatele nemôžete ukladať do statických premenných alebo ako prvky poľa alebo poľa.
  6. Spravované ukazovatele nemôžete použiť ako typ prvku poľa.
  7. Spravovaný ukazovateľ môže ukazovať na referenciu na objekt alebo na typ hodnoty.
  8. Ak zadáte parameter metódy ako referenciu, argument je vlastne spravovaný ukazovateľ.
  9. Spravované ukazovatele sa tiež označujú ako typy byref.
  10. Spravovaný ukazovateľ môže ukazovať na lokálnu premennú metódy alebo na parameter metódy.

Zadajte argument odkazom v C #

Dobre, konceptov máme dosť. Poďme teraz napísať nejaký kód, aby sme pochopili spravované ukazovatele. Na vyjadrenie spravovaného ukazovateľa môžete použiť parametre ref, ref locals alebo ref returns. Pozrime sa postupne na každú z nich.

Zvážte nasledujúcu štruktúru, ktorá obsahuje iba jedného člena, celočíselnú premennú.

verejná štruktúra MyStruct

{

public int MyField;

}

Nasledujúca metóda aktualizuje hodnotu dátového člena MyField inštancie MyStruct.

aktualizácia súkromného statického prázdna (ref MyStruct data)

{

data.MyField = 5;

}

Nasledujúci úryvok kódu ilustruje, ako môžete argument odovzdať odkazom namiesto hodnoty.

public int Main ()

{

MyStruct obj = new MyStruct ();

obj.MyField = 1;

Aktualizácia (ref obj);

Console.WriteLine (obj.MyField);

Console.Read ();

}

Namiesto tried môžete využiť výhody štruktúr, aby ste sa vyhli alokácii haldy a réžii kopírovania údajov. Toto je dobrý optimalizačný trik, ktorý je možné použiť pre štruktúry, ktoré majú málo dátových členov.

Po vykonaní vyššie uvedeného programu sa v okne konzoly zobrazí „5“.

Použite ref local na uloženie spravovaného ukazovateľa v C #

Môžete tiež použiť ref local na uloženie spravovaného ukazovateľa. Nasledujúci úryvok kódu ilustruje, ako je to možné dosiahnuť. Všimnite si použitie kľúčového slova ref na oboch stranách úlohy.

public static void UpdateDataUsingRefLocal (údaje MyStruct)

  {

ref int refLocal = ref data.MyField;

refLocal = 10;

  }

Môžete využiť vrátenie ref na vrátenie premennej z metódy, ktorá predstavuje spravovaný ukazovateľ. Upozorňujeme, že to nemôže byť lokálna premenná, to znamená, že nemôžete vrátiť lokálnu premennú, ktorá predstavuje spravovaný ukazovateľ. Pokus o vrátenie lokálnej premennej bude mať za následok chybu kompilácie.

Nasledujúci úryvok kódu ilustruje, ako je možné použiť návratové hodnoty.

public static ref int GetMarksByRef (značky int [], int subjectIndex)

{

vrátiť referenčné značky [subjectIndex];

}

Zatiaľ čo odkaz na objekt odkazuje na začiatok objektu, spravovaný ukazovateľ môže ukazovať dovnútra objektu, na pole typu alebo na prvok poľa. Je zaujímavé vedieť, ako riadené ukazovatele fungujú v zákulisí. O tom, ako spravované ukazovatele fungujú, sa budem podrobnejšie rozprávať v budúcom príspevku tu.

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