Programmēšana

Kā izmantot pārvaldītos rādītājus C #

Rādītājs ir mainīgais, kas norāda uz cita mainīgā adresi. Citiem vārdiem sakot, rādītājs satur cita mainīgā vai atmiņas vietas atmiņas adresi. Vēl nesen vienīgais veids, kā strādāt ar rādītājiem C #, bija nedroša koda izmantošana. Jūs varētu izmantot nedrošs atslēgvārdu, lai definētu nedrošu kontekstu un pēc tam izveidotu nepārvaldītus rādītājus vai izsauktu vietējās funkcijas, izmantojot nepārvaldītus rādītājus.

Šeit jāatzīmē, ka nedrošs kods nozīmē kodu, kas tiek izpildīts ārpus CLR konteksta. Tas ir nepārvaldīts kods. Tomēr, tā kā pēc noklusējuma izslēdzat CLR nodrošināto drošību, ieteicams nedrošu kodu izmantot tikai tad, ja esat informēts par atmiņas pārvaldības darbību tīklā .Net.

Objekta atsauce C # ir tipa drošs rādītājs, kas norāda uz objekta sākumu. CLR ir cita veida rādītājs, kas pazīstams kā pārvaldīts rādītājs. Šajā rakstā ir apskatīts, kas ir pārvaldītais rādītājs, kāpēc tas ir noderīgs un kā mēs varam strādāt ar to C #.

Pārvaldīti rādītāji C # paskaidroti

Pārvaldīts rādītājs atšķiras no droša tipa rādītāja ar iespēju norādīt uz citām objekta vietām, t.i., ne tikai uz objekta sākumu. Tāpat kā objekta atsauce, arī pārvaldītais rādītājs var norādīt uz pārvaldītajā kaudzē saglabātajiem objektiem. Atšķirība ir tā, ka, kamēr objekts norāda uz objekta sākumu, pārvaldītais rādītājs var norādīt uz metodes parametriem, laukiem, masīva elementiem vai jebkuru citu objekta daļu.

Būtībā pārvaldīts rādītājs var norādīt uz:

  • vietējais mainīgais
  • masīva elements
  • metodi parametrs
  • salikta tipa lauks

Pārvaldīti rādītāji tieši neatbalsta rādītāju aritmētiku. Nevar “pievienot” vai “atņemt” to adrešu vērtības, uz kurām viņi norāda. Jūs nevarat atzīmēt pārvaldītā rādītāja vērtību. Acīmredzot tieši šo ierobežojumu dēļ pārvaldītie rādītāji nav skaidri atklāti C # valodā. Tomēr pārvaldītie rādītāji jau ilgu laiku ir netieši norādīti C # kā atsauces parametri. Kad parametram metodi nododat pēc atsauces, aizkulisēs izmantojat pārvaldītu rādītāju.

10 noteikumi pārvaldīto rādītāju izmantošanai C #

Ievērojiet šādus punktus par pārvaldītajām norādēm.

  1. Pārvaldīti rādītāji nevar būt nulle.
  2. Pārvaldītajam rādītājam nav iespējams norādīt uz citu pārvaldītu rādītāju.
  3. Pārvaldīti rādītāji nevar būt uz kaudzes.
  4. Jūs nevarat apmainīties ar pārvaldītu rādītāju ar objekta atsauci.
  5. Pārvaldītos rādītājus nevar glabāt statiskos mainīgos vai kā masīva vai lauka elementus.
  6. Jūs nevarat izmantot pārvaldītos rādītājus kā masīva elementa tipu.
  7. Pārvaldīts rādītājs var norādīt uz objekta atsauci vai vērtības tipu.
  8. Ja jūs nododat metodes parametru kā atsauci, arguments faktiski ir pārvaldīts rādītājs.
  9. Pārvaldītos rādītājus sauc arī par byref tipiem.
  10. Pārvaldīts rādītājs var norādīt uz metodes lokālo mainīgo vai metodes parametru.

Ievadiet argumentu ar atsauci C #

Labi, mums ir pietiekami daudz jēdzienu. Tagad uzrakstīsim kodu, lai saprastu pārvaldītās norādes. Lai attēlotu pārvaldītu rādītāju, varat izmantot ref parametrus, ref vietējos iedzīvotājus vai ref atgriešanās. Izpētīsim katru no šiem pa vienam.

Apsveriet šādu struktūru, kurā ir tikai viens loceklis, vesels skaitļa mainīgais.

publiskā struktūra MyStruct

{

public int MyField;

}

Šī metode atjaunina MyStruct instances MyField datu dalībnieka vērtību.

privāts statisks anulēts atjauninājums (norādiet MyStruct datus)

{

dati. Mans laukums = 5;

}

Šis koda fragments parāda, kā jūs varat nodot argumentu ar atsauci, nevis vērtību.

public int Main ()

{

MyStruct obj = new MyStruct ();

obj.MansLauka = ​​1;

Atjaunināt (ref obj);

Console.WriteLine (obj.MansLauka);

Konsole. Lasīt ();

}

Jūs varat izmantot struktūru priekšrocības klašu vietā, lai izvairītos no kaudzes piešķiršanas un datu kopēšanas papildu izdevumiem. Tas ir labs optimizācijas triks, ko var izmantot struktūrām, kurās ir maz datu dalībnieku.

Izpildot iepriekš minēto programmu, konsoles logā tiek parādīts “5”.

Izmantojiet ref vietējo, lai pārvaldītu rādītāju saglabātu C #

Pārvaldīta rādītāja glabāšanai varat izmantot arī ref local. Šis koda fragments parāda, kā to var panākt. Ievērojiet ref atslēgvārda izmantošanu abās uzdevuma pusēs.

public static void UpdateDataUsingRefLocal (MyStruct dati)

  {

ref int refLocal = atsauces dati. MyField;

refLocal = 10;

  }

Varat izmantot ref atgriešanās priekšrocības, lai atgrieztu mainīgo no metodes, kas attēlo pārvaldītu rādītāju. Ņemiet vērā, ka tas nevar būt lokāls mainīgais, t.i., jūs nevarat atgriezt vietējo mainīgo, kas apzīmē pārvaldītu rādītāju. Mēģinot atgriezt lokālo mainīgo, radīsies kompilācijas kļūda.

Šis koda fragments ilustrē, kā var izmantot ref atgriešanas.

public static ref int GetMarksByRef (int [] zīmes, int subjectIndex)

{

atgriešanās norādes zīmes [subjectIndex];

}

Kamēr objekts atsaucas uz objekta sākumu, pārvaldītais rādītājs var norādīt objekta iekšpusē, uz tipa lauku vai uz masīva elementu. Ir interesanti uzzināt, kā pārvaldīti rādītāji darbojas aizkulisēs. Kā pārvaldītie rādītāji darbojas, es sīkāk apspriedīšu turpmākajā šeit.

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