Programavimas

Kaip naudoti valdomus rodiklius C #

Rodyklė yra kintamasis, nurodantis kito kintamojo adresą. Kitaip tariant, žymeklis talpina kito kintamojo atminties adresą arba atminties vietą. Iki šiol vienintelis būdas naudoti žymeklius C # buvo naudoti nesaugų kodą. Galėtumėte pasinaudoti nesaugus raktinį žodį, kad apibrėžtumėte nesaugų kontekstą ir tada sukurtumėte nevaldomas rodykles arba iškvieskite savąsias funkcijas naudodami nevaldomus rodykles.

Čia reikia pažymėti, kad nesaugus kodas reiškia kodą, kuris vykdomas ne CLR kontekste. Tai yra nevaldomas kodas. Tačiau kadangi pagal numatytuosius nustatymus išjungiate CLR teikiamą saugą, patartina naudoti nesaugų kodą tik tuo atveju, jei žinote, kaip atminties valdymas veikia .Net.

Objekto nuoroda C # yra saugus tipui žymeklis, nurodantis objekto pradžią. CLR yra dar vienas rodiklio tipas, žinomas kaip valdomas rodyklė. Šiame straipsnyje nagrinėjama, kas yra valdomas žymeklis, kodėl jie yra naudingi ir kaip mes galime su jais dirbti C #.

Paaiškinti C # valdomi rodyklės

Valdomas žymeklis skiriasi nuo saugaus tipo žymiklio tuo, kad jis gali nurodyti kitas objekto vietas, t. Y. Ne tik objekto pradžią. Kaip ir objekto nuoroda, valdomas žymeklis gali nukreipti į objektus, saugomus valdomame kaupe. Skirtumas yra tas, kad nors objektas nurodo objekto pradžią, valdomas žymeklis gali nurodyti metodo parametrus, laukus, masyvo elementus ar bet kurią kitą objekto dalį.

Iš esmės valdomas žymeklis gali nurodyti šiuos dalykus:

  • vietinis kintamasis
  • masyvo elementas
  • metodo parametras
  • junginio tipo laukas

Valdomi žymekliai tiesiogiai nepalaiko rodyklių aritmetikos. Negalite „pridėti“ ar „atimti“ adresų, į kuriuos jie nurodo, reikšmių. Negalite pažymėti valdomo rodyklės vertės. Matyt, dėl šių apribojimų valdomi rodyklės nėra aiškiai atskleidžiamos C # kalba. Tačiau valdomi rodyklės C # ilgą laiką buvo numanomi kaip atskaitos parametrai. Kai parametrą perduodate metodui pagal nuorodą, užkulisiuose naudojate valdomą žymeklį.

10 valdomų rodyklių naudojimo C # taisyklių

Atkreipkite dėmesį į šiuos valdomų rodyklių punktus.

  1. Tvarkomi rodyklės negali būti niekiniai.
  2. Valdomas žymeklis negali nukreipti kito valdomo žymiklio.
  3. Tvarkomi rodyklės negali būti ant krūvos.
  4. Negalite pakeisti valdomo žymiklio su objekto nuoroda.
  5. Negalite saugoti valdomų rodyklių statiniuose kintamuosiuose arba kaip masyvo ar lauko elementus.
  6. Negalite naudoti valdomų rodyklių kaip masyvo tipo.
  7. Valdomas žymeklis gali nukreipti į objekto nuorodą arba vertės tipą.
  8. Jei metodo parametrą perduosite kaip nuorodą, argumentas iš tikrųjų yra valdomas rodyklė.
  9. Tvarkomi rodyklės taip pat vadinami byref tipais.
  10. Valdomas žymeklis gali nukreipti į vietinį metodo kintamąjį arba metodo parametrą.

Pateikite argumentą pagal nuorodą C #

Gerai, mums jau užteko sąvokų. Dabar parašykime kodą, kad suprastume valdomus patarimus. Norėdami naudoti valdomą žymeklį, galite naudoti ref parametrus, ref vietinius gyventojus arba ref grąžinti. Panagrinėkime kiekvieną iš šių po vieną.

Apsvarstykite šią struktūrą, kurioje yra tik vienas narys, sveikasis skaičius.

viešosios struktūros „MyStruct“

{

public int MyField;

}

Šis metodas atnaujina „MyStruct“ egzemplioriaus „MyField“ duomenų nario vertę.

privatus statinis negaliojantis atnaujinimas (nurodykite „MyStruct“ duomenis)

{

duomenys. Mano laukas = 5;

}

Šis kodo fragmentas parodo, kaip galite perduoti argumentą nurodydami nuorodą, o ne vertę.

public int Main ()

{

„MyStruct obj“ = naujas „MyStruct“);

obj.Mano laukas = 1;

Atnaujinti (ref obj);

Console.WriteLine (obj.MyField);

Pultas.Skaitykite ();

}

Galite pasinaudoti vietoj klasių teikiamais pranašumais, kad išvengtumėte krūvos paskirstymo ir papildomų duomenų kopijavimo išlaidų. Tai yra geras optimizavimo triukas, kurį galima naudoti struktūroms, kuriose yra nedaug duomenų narių.

Kai vykdote aukščiau nurodytą programą, konsolės lange rodomas „5“.

Jei norite saugoti valdomą žymeklį C #, naudokite ref vietinį adresą

Taip pat galite naudoti „ref local“, kad išsaugotumėte valdomą žymeklį. Šis kodo fragmentas parodo, kaip tai galima pasiekti. Atkreipkite dėmesį į ref žodžio naudojimą abiejose užduoties pusėse.

public static void UpdateDataUsingRefLocal („MyStruct“ duomenys)

  {

ref int refLocal = ref duomenys.MyField;

refLocal = 10;

  }

Galite pasinaudoti ref grąžomis, kad grąžintumėte kintamąjį iš metodo, kuris rodo valdomą žymeklį. Atminkite, kad tai negali būti vietinis kintamasis, t. Y. Jūs negalite grąžinti vietinio kintamojo, kuris atspindi valdomą rodyklę. Bandant grąžinti vietinį kintamąjį bus sukompiliavimo klaida.

Šis kodo fragmentas iliustruoja, kaip galima naudoti ref grąžas.

public static ref int GetMarksByRef (int [] ženklai, int subjectIndex)

{

grąžinimo nuorodos ženklai [subjectIndex];

}

Kadangi objektas nurodo objekto pradžią, valdomas žymeklis gali nukreipti objekto viduje, į tipo lauką arba į masyvo elementą. Įdomu sužinoti, kaip valdomi rodyklės veikia už kadro. Aptarsiu, kaip valdomi rodyklės veikia išsamiau, būsimame įraše čia.

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