Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 31087|Atsakyti: 0

[Šaltinis] C# anoniminio tipo mokymosi dienoraštis

[Kopijuoti nuorodą]
Paskelbta 2020-10-16 17:41:04 | | | |
Kai nenorime apibrėžti sudėtingų klasių, tokių kaip sudėtingi metodai, įvykiai ir konstruktoriai, galime dinamiškai generuoti pasirinktinį duomenų tipą -> anoniminį tipą.

1. Apibrėžkite anonimiškumo tipą

Apibrėždami anoniminį tipą, turite naudoti raktinį žodį var ir objekto inicijavimo sintaksę.

var: kompiliatorius automatiškai sugeneruoja naują klasės apibrėžimą kompiliavimo metu (C# kode nematome klasės pavadinimo).

Inicijavimas: Jis nurodys kompiliatoriui sukurti privačius fono laukus ir (tik skaityti) ypatybes naujai sukurtam tipui.

Sukurkite anoniminį tipą perduodami parametrus ir atspausdinkite atitinkamą informaciją



Skambinti: Anoniminiai tipai taip pat gali būti kuriami naudojant kietąjį kodą



2. Vidinis anoniminių tipų atstovavimas

Visi anoniminiai tipai automatiškai paveldimi iš objekto, todėl automobilio objekte galime naudoti ToString, GetHashCode, Equals, pabandykime tai pavadinti:



Kvietimai teikti paraiškas ir rezultatai:







Automobilio objekto tipas yra: <>f__AnonymousType03 (jūsų gali skirtis), anoniminį tipo pavadinimą jaučia kompiliatorius, mes negalime įsikišti, CIL kodas.

3. Metodų ToString() ir GetHashCode() įgyvendinimas.

1.ToString()



2.GetHashCode()

Jis naudoja kiekvieno anoniminio tipo kintamąjį, kad apskaičiuotų maišos reikšmę kaip System.Collections.Generic.EqualityCompare tipo įvestį, ir <T>sukuria tą pačią maišos reikšmę tik tuo atveju, jei du anoniminiai tipai turi tas pačias savybes ir jiems suteikiama ta pati reikšmė.

4. Vienoda anoniminių tipų semantika

Lygu()





Išanalizuokite rezultatus:

1. Equals(): kompiliatorius perrašo Equals(), kad nustatytų, ar objektai yra lygūs, remdamasis reikšmių semantika (pvz., pažymi kiekvieno dviejų objektų duomenų nario reikšmę)

2. == Operatoriai: Kadangi anoniminiai tipai neperkrauna lygiaverčių operatorių (== , !=), == lygina nuorodas, o ne turinį.

3. GetType(): Nes jei tame pačiame rinkinyje paskelbsime du identiškus (su tais pačiais atributais) anoniminius tipus, kompiliatorius sugeneruos tik vieno anoniminio tipo apibrėžimą.

5. Anoniminiai tipai, kuriuose yra anoniminių tipų



Suvestinė:

Tiesą sakant, turėtume būti atsargūs naudodami anoniminius tipus, ypač kai naudojame LINQ, ir niekada neatsisakyti naudoti stipriai įvestas klases ar struktūras dėl anoniminių tipų atsiradimo.

Tiesą sakant, pats anoniminis tipas turi daug apribojimų:

  • Jūs nekontroliuojate anoniminio tipo pavadinimo
  • Anoniminiai tipai paveldi System.Object
  • Anoniminiai laukų ir atributų tipai visada yra tik skaitomi
  • Anoniminiai tipai nepalaiko įvykių, pasirinktinių metodų, pasirinktinių operatorių ir pasirinktinių perrašymų
  • Anoniminiai tipai yra numanomi užantspauduoti
  • Kuriant anoniminius tipus naudojamas tik numatytasis konstruktorius


Jei mums reikia greitai apibrėžti objekto formą, neapibrėžiant jo funkcijos, galime naudoti anoniminį tipą.




Ankstesnis:SQL serverio duomenys eksportuojami kaip įterpimo scenarijus
Kitą:.net/C# atspindi neanonimines funkcijas &lt;&gt;f__AnonymousType0 metodus
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com