C # net 4

Recent am programatori foarte frecvente nu sunt utilizate numai în convențional „programul“ structura de viață (struct), dar nu știu nimic despre acest subiect. Și de multe ori doar pentru tine sa viață „programul“ folosește întotdeauna clase (clasa). În acest articol, aș dori să se concentreze din nou asupra diferențelor dintre structuri și clase.

Ce este strusture?

Punctul cheie al articolului. Cu cât folosiți o structură în loc de un mic (probabil, mai corect să spunem - mici) clase, utilizarea de memorie mai puțin costisitoare va fi o resursă. Voi presupune că nu are nevoie de o explicație de ce ... „buchet“, „colector de gunoi“, „intervale de timp incerte de trecere“, complexitatea colectorului „manual“ haldă de control și de gunoi. Toate punctele cheie deja enumerate.

La fel ca și clase, structs pot avea câmpuri, metode și constructori. În timp ce pro proiectanții trebuie să vorbească mai mult (va fi următoarea pe tema), deoarece acesta este un concept foarte important în compararea clase și structuri.

Structura VAMIN ca întotdeauna să cred că următoarele informații sunt pentru tine, ca o surpriză. În C #, tipuri numerice primitive int. mult timp. float este un alias pentru structura System.Int32. System.Int64 și System.Single respectiv. Aceste structuri sunt câmpuri și metode. Suni de obicei metode cu privire la tipurile de date de variabile. De exemplu, fiecare dintre aceste structuri are metoda ToString. De asemenea, aceste structuri au un câmp static, de exemplu, sau Int32.MaxValue Int32.MinValue. Se pare că utilizați deja structura, și, prin urmare, familiarizați cu ele în fiecare zi „programul“ de viață.

clase de masă și structuri de la Microsoft. NET Framework

Tabelul prezintă pseudonimele și tipurile lor corespunzătoare, precum și furnizează informații despre reprezentarea de tip (struct sau clasă).

Spre deosebire de clase, utilizarea câmpurilor publice în structurile în cele mai multe cazuri nu este recomandată, deoarece nu există nici o modalitate de a controla valorile în ele. De exemplu, cineva ar putea stabili valoarea minute sau secunde de peste 60 de opțiuni mai corect în acest caz - să utilizeze proprietatea, și pentru a verifica constructor:

Apropo, ... În mod implicit, nu puteți utiliza unele declarații generale în structurile voastre. De exemplu, nu puteți utiliza un operator de comparare (==) și vizavi de el (! =) În structurile lor. Cu toate acestea, puteți declara în mod explicit și să pună în aplicare operatori pentru structurile lor.

Și care este diferența dintre structuri și clase

Să ne uităm la un exemplu în care a fost stabilită o eroare:

Motivul pentru care apare o eroare care nu se poate utiliza constructorul implicit (fără parametri) pentru structura, deoarece compilatorul le generează întotdeauna el însuși. În ceea ce privește clasa, compilatorul creează un constructor implicit numai dacă nu ați creat. Constructorul generat pentru structura stabilește întotdeauna câmpul la 0. fals sau nul - ca și pentru clase. Astfel, puteți fi siguri că entitatea se va comporta întotdeauna „adecvat“, în conformitate cu valorile implicite din tipurile utilizate. Dacă nu doriți să utilizați valorile implicite, puteți inițializa câmpurile cu valorile lor în constructor cu parametrii de inițializare. Cu toate acestea, în cazul în care acest constructor nu va fi inițializat cu orice valoare, compilatorul va inițializa pentru tine și arată o eroare.

Primele structuri regulă. Întotdeauna, toate variabilele trebuie să fie inițializată!

Acest tabel este un fel de sume tot din cele de mai sus și prezintă principalele diferențe între clase și structuri.

Utilizarea unor structuri cum ar fi variabile

După ce ați creat o structură, o puteți precum și cursuri și alte tipuri de utilizare. De exemplu, crearea unei structuri de timp. Pot să-l utilizați în clasă:

Puteți crea o versiune ce poate fi nulă a unei variabile a structurii de tip modificator este utilizat, și apoi atribui o valoare nulă „?“:

Timpul? currentTime = null;

structuri de initializare

În acest articol, am spus în mod repetat că structura câmpului poate fi inițializat cu constructorul, și indiferent de ce „proprii“ sau „default“. Caracteristicile speciale ale structurilor includ, de asemenea, faptul că, datorită faptului că structurile sunt un tip important, este posibil să se creeze o structură fără a utiliza un constructor, de exemplu:

În acest caz, se creează variabila, dar câmpurile sunt inițializate în funcție de parametrii constructorului.

concluzie

IMHO, principala diferență între structuri și clase: structuri sunt transmise prin valoare (de exemplu, copierea), clasa de obiecte - aici. Aceasta este diferențele semnificative în comportamentul lor, și nu în cazul în care acestea sunt stocate.
Notă: Structura poate fi, de asemenea, transmise prin referință, utilizând modificatori afară și ref.

În opinia mea greu de mulțumit, stilul este șchiop. Multe propuneri analfabeți. De exemplu:
> Caracteristicile speciale ale structurilor includ, de asemenea, faptul că, datorită faptului că structurile sunt un tip important, apoi a crea o structură fără a utiliza un constructor, de exemplu:
Cu toate acestea creează o structură poate sau nu poate? Ce cuvânt lipsește? Aceasta se numește, ghici el însuși.

P.S. Mi-aș dori să scrie noi articole de abordare mai bine, gânditor.

Apropo, aici este o altă eroare la nivel mondial: titlul articolului începe cu .NET 4.0, iar descrierea este realizată exclusiv pe C #. Calabonga, cu tot respectul pentru tine, eu nu pot să nu denunțăm acest material. In MC ++ (C ++. NET), clase, de asemenea, pot fi declarate pe stivă. Cred că acest exemplu este suficient.

>> Tabelul prezintă aliasurile și tipurile lor corespunzătoare
Ucis la fața locului - care este „alias“. Poate "alias"? De ce să aglomerați limba română, în cazul în care există un termen „nativ“.

„Puteți crea o versiune ce poate fi nulă.“

Dumka blogger. „Ce permite NULL? Uh. Ca pe rusul (zgariere napi). O pula cu ea, și scrie nulyabl“. (Oțel sudoare Rzhot). Versiunea articol este lung obnulyablit restante :))

Multumesc pentru articol, l-au ajutat să înțeleagă.

Aici a menționat Richter - aici creierul și zamorochil mea, cu toate că, în general, cărțile sale sunt de nepretuit.

Runtime limbaj comun (CLR) permite întotdeauna crearea de instanțe tip de valoare, și acolo
este nici o modalitate de a preveni un tip de valoare să fie instanțiat. Din acest motiv, tipuri de valoare nu de fapt, chiar trebuie să aibă un constructor definit în interiorul lor, iar C # compilatorul nu emite implicit
constructori pentru tipuri de valoare fara parametri.

Am înțeles bine că se spune „C # nu creează un constructor implicit.“

Și judecând după articol, și la fel cum se comportă structura generală - implicit la același creat p.

Sunt pe un curs de Richter nu a înțeles?

De asemenea, întrebarea pe scara Richter:
în crearea unor structuri de exemplu un nou cuvânt cheie, în cazul în care acesta va fi, pe heap sau pe stivă. Cartea este scrisă, acesta este întotdeauna în stivă, și ITVDN a spus că, în acest caz, heap.

ASP.NET MVC: Cum PagedList pe AJAX?

Cum sa faci o prismă (MEF) în aplicația Silverlight