O referință la o clasă sau la un delegat este o depășire a stivei în limba rusă

Pe măsură ce mă duc mai adânc în limbajul c #, mă întreb din ce în ce de ce este necesar sau nu. Deoarece sunt auto-predat și scriu programul introducând, în codurile mele hackerul își va rupe piciorul. Dar tot scriu programe. Desigur, poate că le scriu incorect, dar rezultatul final este că totul funcționează.







Problema este că nu am pe nimeni care să ceară să primească un răspuns adecvat. Nu am programatori cunoscuți.

presetat 26 ianuarie 15 la 13:52

@ Gennadiy Pisarev Aș fi fericit să răspundă, dar răspunsul la această întrebare necesită o explicație destul de lung -, din păcate, trebuie să explice mult, datorită faptului că cunoștințele dumneavoastră este foarte superficială, aparent. Scrie o explicație detaliată aici, din păcate, nu pot acum, încercați să-l facă un pic mai târziu, atunci când timpul - DreamChild 26 ianuarie '15 la 14:23

Un mic exemplu despre delegați

Uneori poate exista o astfel de situație în care nu cunoașteți exact numele metodei pe care doriți să o treceți la o funcție externă, dar trebuie să fie unificată. În plus, pot fi adăugați delegați.

Un exemplu tipic cu sortimente.

În acest caz, metodele sunt executate în Main, dar practica de a utiliza delegați este aceea că acestea sunt transmise altor funcții care nu trebuie să codifică cu greu metoda folosită.

Un exemplu mic despre interfețe

Un alt lucru cu interfețe, acestea sunt necesare pentru o descriere clară a ceea ce este în clasă. De exemplu, faceți o aplicație care se conectează la baza de date. Trebuie să faceți o conexiune la trei tipuri de baze de date: MySQL, SQL SERVER și Oracle. Ai putea să faci propria clasă pentru toată lumea și să-i tragi, dar este mai ușor să tragi interfața fără să știi implementarea clasei.

Acum, codul care utilizează conexiunile nu se poate gândi la implementarea internă a acestor conexiuni și le poate executa prin interfață.

În plus, este de remarcat faptul că este foarte ușor de a adăuga o nouă bază de date (sau absolut rescrie complet vechi), moștenind interfață și fără a schimba restul codului. Tot aici se efectuează polimorfismul, știți mereu ce metode o clasă poate avea, uitându-se la interfața sa. De asemenea, vă permite să vă scrieți clasele pe această interfață. Un exemplu utilizat în mod frecvent - este construit și IEnumerable IQueryable, care este moștenit de la clase proprii poate pune în aplicare comportamentul corect „ca masa“ pentru referințe indicele Clasa_Mea [1] și „Cum de a transfera“ pentru foreach (var în Clasa_Mea).







Ei bine, deoarece a existat un subiect despre cărți, aici este o listă bună:

În plus, delegații sunt adesea utilizați pentru a semna (și dezabonați folosind operația - = =) evenimentelor.

Aceasta este exact ceea ce mi-am amintit imediat, există încă multe situații în care clasele și interfețele pentru utilizare sunt convenabile.

Delegatul și adevărul nu se deosebesc semantic de referința la clasă, plus indicațiile care ar trebui să fie numite. Nu există delegați în Java, și acolo este necesar să faceți acest lucru.

Cu toate acestea, după cum arată practica, această abordare conduce la un cod destul de greoi.

Analog în Java / Swing

În corectitudine, trebuie remarcat faptul că există aceleași persoane / funcții lambda în cea mai recentă versiune a Java, astfel încât a devenit ca sintaxa.

@DreamChild mulțumiri. Nu trebuie să învăț cum să creez un delegat. Deși există întrebări în legătură cu acest lucru. Întrebarea este cum să faceți o referire la clasă și să apelați metoda sau să faceți o trimitere la delegat. Ce afectează? Poate, dintr-o mulțime de referințe la clase, aceasta afectează performanța programului sau altceva. În ceea ce privește abundența codului, deci pentru a apela metoda cu o referință la clasă, se pare că o linie mai mică va trebui să scrie. Din nou, repet, nu scriu programe uriașe pentru a evalua avantajul. - Gennady Pisarev 27 ianuarie '15 la 5:45

@ Gennadiy Pisarev: Nu am încercat să explice cum să creați un delegat, am încercat să arăt avantaj sintactică. Și cred că există o diferență nu este în același rând, în abundența de șabloane: nu delegat va primi o mulțime de cod, care nu spune ce crezi, și trebuie doar să tăiați. Cu ocazia avantajelor semantice, totul este mai dificil. Pentru gustul meu, de obicei spun sursa evenimentelor doar o acțiune. pe care trebuie să-l inițieze, astfel încât delegatul este semantic mai aproape de modul în care cred. Dacă credeți că în plus față de acțiunea în sine, obiectul care o implementează este, de asemenea, important. - VladD 27 ianuarie '10 la ora 10:02

@ Gennady Pisarev. atunci va fi mai corect să transferați obiectul. Adică, forma înregistrării este dictată de semantică, și nu de o regulă dogmatică, care acționează odată pentru totdeauna. Deci, în fiecare caz, ar trebui să alegeți exact ca arhitectul programului. La mine, în majoritatea covârșitoare, obiectul nu este important și numai acțiunea este importantă. YMMV. - VladD 27 ianuarie '15 la ora 10:05







Articole similare

Trimiteți-le prietenilor: