Showing posts with label tutorijal. Show all posts
Showing posts with label tutorijal. Show all posts

Sunday, May 28, 2023

Otključajte Potencijal C++ programskog jezika, otkrijete moć operatora

Operatori su simboličke oznake u C++ programskom jeziku koji se koriste za izvođenje određenih operacija nad podacima. Oni omogućavaju manipulaciju podacima, izvršavanje aritmetičkih operacija, poređenje vrednosti, logičke operacije, manipulaciju bitovima i još mnogo toga. Neke od operatora ste definitvno učili još u osnovnoj školi na časovima matematike. U programiranju operatora imate mnogo više, i nisu svi isti u svim programskim jezicima. Ali postoje oni osnovni operatori koji su svugde isti pa i u matematici. Tako da većinu ovih stvari poznajete, samo treba da obratite pažnju kako računari koriste operatore, posebno u C++ programskom jeziku. U C++ programskom jeziku postoje različite vrste operatora i oni su:

  • Aritmetički operatori
  • Operatori dodele ili dodeljivanja
  • Aritmetički unarni operatori
  • Relacioni ili operatori poređenja
  • Logički operatori
  • Binarni operatori
  • Ternarni operatori  
  • I drugi. 

Za početak, upoznaćete se samo sa nekim osnovnim operatorima u C++ programskom jeziku, dok ćete ostale koristiti u naprednijim postovima tutorijala. U programiranju ćete bez obzira na vaše iskustvo, često dolaziti u susret sa stvarima koje su vam nepoznate. U velikim projektima ćete nailaziti na delove kôd-a, koji nikad niste videli; tako da nemojte sebe da opterećujete da odmah treba sve da znate. Bitno je da svaki dan kodirate, stičete navike i razvijate programersko razmišljanje. Ali i da sami sebe motivišete radoznalošću i ličnim željama da nešto kreirate. Sve što više budete kreativni i uporni, više 
ćete i uživati u vlastitoj kreativnosti i bolje programirati.


( Operatori u C++ programskom jeziku )


Pogledajte aritmetički operatore:

  • Sabiranje +
  • Oduzimanje –
  • Množenje *
  • Deljenje /
  • Modul %

Ove operatore možete videti skoro na svakom digitronu. Razlika je u tome što u C++ programskom jeziku možete isprogramirati digitron zahvaljujući njima. Obratite pažnju na operator modul. U programiranju modul ima često drugačije značenje jer se češće odnosi na module nego na operatore, zato se češće naziva modulo ili skraćeno mod. Ono što je bitno, jeste da modul kao operator vam se definiše kao ostatak prilikom deljenja dva prirodna broja. U prevodu prilikom deljenja celih brojeva. To nije isto što i deljenje dva decimalna broja:

5 / 2 = 2,5                     5 % 2 = 1

Modulo primena u programiranju se najbolje može objasniti kad na primer želite da vidite da li je neki broj paran ili neparan. Tad je dovoljno broj modulo sa 2. Ukoliko nemate ostatak ili modulo između dva broja je 0, onda je broj paran.

5 % 2 = 1       // modulo od 5 i 2 ima ostatak, znači broj 5 je neparan

4 % 2 = 0       // modulo od 4 i 2 nema ostatak, znači broj 4 je paran

Operatori dodele ili dodeljivanja


Tuesday, April 07, 2020

Funkcije u C# programskom jeziku


Prošli put smo učili Nizove u C# programskom jeziku, dok ćemo danas učiti još jednu interesantnu i korisnu stvar; funkcije. Bez obzira da li ste početnik u programiranju i bez obzira da li ste do sada učili funkcije u C# programskom jeziku, definitivno ste ih koristili čak i u vašem prvom C# programu. Funkcije predstavljaju jednu izdvojenu celinu naredbi koji izvršavaju neki zadatak. Funkcije pravite kada imate potrebu da deo koda izdvojite i stavite u jednu celinu ili kad imate potrebu da jedan deo koda više puta koristite u programu. Jednostavnije je da pišete samo jednom kod i da ga pozovete kad god vam treba nego da pišete isti kod. Na primer imate funkciju koja latinična slova konvertuje na ćirilična slova. Kad god hoćete da nešto napišete na ćirilici samo pozovete funkciju koja to radi. Isto tako na primer; kad imate neku grešku, ispravljate je samo na jednom mestu u funkciji a ne sto puta u celom kodu. Funkcije često nazivaju metodama, što one i jesu. Ali mnogo programera danas meša pojam metode sa funkcijama jer postoji razlika. Metode nisu samo funkcije, već predstavljaju i druge članove klase i strukture koji ne predstavljaju podatke. Znači metode su i indekseri, operatori, konstruktori i destruktori. Čak i svojstva se ponekad smatraju metodama, ali treba znati da svojstva imaju samo karakteristike metoda i atributa, ali svojstva nisu ni metode ni atributi. Ovo je bitno da znate najviše radi testova koji se polažu za Microsoft sertifikate. I pored toga što su funkcije u C# programskom jeziku slične funkcijama u C i C++ programskom jeziku, funkcije u C++ programskom jeziku možete pogledati ovde; one se takođe razlikuju. C# programski jezik ne podržava globalne metode. Svaku funkciju morate pisati unutar klase. U C# programskom jeziku nije moguće koristiti blokove za grupisanje modifikatora poput public ili private već se u C# programskom jeziku funkcije ali i ostale metode moraju deklarisati sa modifikatorima. Modifiers - modifikatori vam određuju rang delovanja promenjive, funkcije, strukture, metode i klase na nivou celog Solution – rešenja. Osnovni modifikatori pristupa su:
  •          Public – javan, bez restrikcija.
  •      Protected Internal – limitiran na program, klasu i izvedene klase
  •          Internal – limitiran na program i klasu
  •          Protected – limitiran na klasu i izvedene klase.
  •          Private – limitiran samo na klasu

Pored navedeni modifikatora obavezno trebate obratiti pažnju i na ključnu reč: 
  • static – omogućava da nam nije potrebno da instaciramo klasu kako bi smo pristupili članu klase

Postoje i drugi modifikatori kojima pravimo anonimne ili asinhronizovane funkcije ali o njima će biti posebno pisano u narednim postovima. 
  

( Funkcije mogu da vraćaju i ne vraćaju vrednost )

C# programskom jeziku imate jednu specijalnu funkciju, funkcije koje ne vraćaju vrednost i funkcije koje vraćaju vrednost. Svaka od njih može uzimati argumente. Specijalna funkcija ili funkcija koju poznajete kao Main() funkcija se koristi kao startna pozicija svakog programa. Može postojati samo jedna funkcija Main() u jednoj klasi ali u drugačijem imenskom prostoru.

static void Main(string[] args) {}

Ako bi ste napravili neku klasu u istom inenskom prozoru i u njoj navedenu funkciju dobili bi ste grešku:
  • Program has more than one entry point defined. Compile with /main to specify the type that contains the entry point.

Zato možete imati na primer više formi u projektu gde svaka forma ima svoju Main() funkciju, ali to je zato što svaka forma ima drugačiji imenski prostor. Takođe vidimo da Main() funkcija prihvata argumente u args niz tipa string. I takođe vidimo ključnu reč void koja nam potvrđuje da navedena funkcija ne vraća nikakvu vrednost, već se program završava kad se funkcija izvrši do kraja. Ovu funkciju nikad ne trebate menjati i posebno ne trebate da pravite neku svoju.

Funkcije koje ne vraćaju vrednost

Tuesday, April 17, 2018

Uvod u LINQ

Zvanično ili formalno LINQ – Language Intergrated Query – Upit integrisan u jezik; jeste jezik struktuiranih upita za pretraživanje i lokalnih kolekcija objekta ali i udaljenih izvora podataka na takav način da ne narušava bezbednost podataka. Za mene lično LINQ je jezik struktuiranih upita koji omogućava skraćeno pisanje code-a u radu sa bilo kakvim kolekcijama i dinamičkim sastavljanjem upita. LINQ  vam omogućava da radite sa različitim izvorima podataka dok koristite isti način kodiranja. Takođe pored C# programskog jezika, LINQ koriste i drugi programski jezici koji podržavaju .Net Framework 3.5 ili noviji. Znam da vam sve ovo zvuči kompleksno i sami po sebi LINQ upiti jesu kompleksni i neophodno je da se na neki način dosta isprakticirate u korišćenju istih kako bi vam bilo jasno kolika je prednost korišćenja LINQ-a u vašem kodiranju. LINQ isključivo radi sa sekvencama i elementima. Sekvenca vam je svaki objekat koji implementira interfejs IEnumerable<T> dok je elemenat svaka stavka sekvence. To takođe znači da se LINQ upiti mogu primenjivati nad bilo kojim izvorom podataka koji primenjuje interfejs IEnumerable<T>. Međutim LINQ se takođe deli na mnogo potrebnih i opcionih delova poput LINQ provajdera, proširenih metoda, lambda izraza i sintakse za razumevanje LINQ upita.


( LINQ Arhitektura )

LINQ provajderi, poput LINQ to Objects, LINQ to Entities, LINQ to XML itd. su komponente između LINQ upita i izvora podataka koje konvertuju standardne LINQ operacije u specifične komande koje izvori podataka mogu razumeti. Npr. LINQ to SQL provajder konvertuje LINQ upite u T-SQL tako da baze podataka mogu razumeti iste. Tako da vi ne morate pisati T-SQL komande u vašem code-u kako bi ste manipulisali podacima iz baze podataka. Proširene metode koje LINQ koristi su već izgrađene metode poput Where, Select, OrderBy itd. Klazula Where se zove i operator restrikcije jer ograničava podatke u rezultatu izvršavanju upita dok klazula Select specifira podatke koji će se pojaviti kao rezultat. Lambda izrazi se opciono koriste umesto imenovanih metoda i pojednostavljuju kodiranje. Lambda izraz je kratak i koncizan način pisanja anonimnih metoda, znači metoda koji nemaju ime; koji se koriste za izvršavanje upita. Lambda operator se piše ovako => Sintakse za razumevanje LINQ  upita su opcione C# ključne reči poput from, in, where, select, desceding itd. Oni pojednostavljuju upite koje pišete.

Kako je nastao LINQ ?

Friday, April 06, 2018

Uvod u Windows forme


Znam da će se mnogi čitaoci mog bloga sada malo začuditi; zašto idem u prošlost i sad pišem o Windows formama kad se danas prave WPF aplikacije. Razloga je više ali pre svega radi vaših pitanja. Mnoga pitanja za C# koja mi postavljaju su i danas vezana za aplikacije bazirane na Windows formama. Pretpostavljam da se u školama još uvek uče Windows forme; u poslovnom svetu C++ programeri još uvek razvijaju projekte bazirane na Windows formama. Ja ću pokušati na svom blogu da pokrijem sve vrste aplikacija koje se pišu u C# programskom jeziku u narednim mesecima, iako je to mnogo komplikovano i zahtevno i trebaće mnogo vremena. Bez obzira što ja lično Windows forme smatram zastarelom tehnologijom; isto tako smatram da one i pored toga nisu za odbaciti jer sa njima imate tu dosta toga da se nauči i neke korisne stvari mogu da se takođe koriste i u drugim aplikacijama često uz neke manje izmene. Postoji i mnoge druge prednosti programiranja Windows formi, npr. brzo učenje, lakše programiranje poslovnih aplikacija, mnoštvo materijala i kontrola mnogobrojnih različitih proizvođača i mnoštvo materijala za učenje.


 ( Windows Forms Designer )

Sve u svemu što se mene tiče osim vremena, ali ja nigde ne žurim; nemam šta da izgubim; dok korist od ovih postova će te vi videti i sami. Npr. mnogo ljudi ne zna code koji šalje dokument na štampanje i slične stvari koje se sa Windows formama lako obrađuju. Sve što vidite kad pokrenete pravljenje Windows Forms aplikacija u Microsoft Visual Studio Net-u su u stvari objekti i klase zasnovane na .NetFramework-u koje omogućavaju isključivo razvoj aplikacija za Windows operativni sistem. Ne možete praviti Windows Forms aplikacije u Linux-u, niti bi to imalo kakve logike. Za formiranje bogatog korisničkog okruženja kod Windows formi se najviše primenjuje standardna tehnika; prevuci, pusti i podesi propertije. Kod WPF  aplikacija se radi slično ali se mnogo češće piše XAML code, nego što se povlače kontrole. Kod Windows Forms aplikacija ćete maksimalno koristiti Windows Forms Designer dok ćete u prozoru Properties Window najčešće podešavati Name, Size, Anchor i Location propertije. Zato vaš IDE okruženje unapred pripremite sa prozorima ToolBox i Properties Window da su vam uvek vidljivi i pri ruci. Windows forme se najlakše uče isključivo svakodnevnim radom i kreativnošću, pa je zato najbolje da odmah kreirate svoju prvu aplikaciju. Prosto će te se iznenaditi koliko je to jednostavno.

Vaša prva Windows Forms aplikacija

Monday, March 26, 2018

Enumeracije ili nabrajanje tipa Enum u C# programskom jeziku


Enumerations - enumeracije su specijalni vrednosni tipovi podataka koji omogućava da zadate grupu imenovanih numeričkih konstanti. U Srbiji se enumeracija često naziva nabrajanje, ali onda je bolje da kažete nabrajanje tipa enum jer postoje i druge vrste nabrajanja u C# programskom jeziku. Programeri C++ programskog jezika ponekad nazivaju enumeraciju skraćeno enums. Zašto enums, zašto ne enum? Zato što je enum skraćenica od ENUM - Electronic number – elektronski broj; što je opet predlog za mapiranje svih telefonskih brojeva u IP adrese.


( Enumeracija čini vaš kod čitljivijim )

Zato je neophodno obratiti pažnju kada pričate sa kolegama o enumeracijama. Inače kada hoćete da deklarišete enumeraciju u C# programskom jeziku; koristite ključnu reč enum izvan funkcija kao što to radite sa strukturama.

enum ime_enumeracije
{
    vrednost1,
    vrednost2,
   
}

Jednom kad ste deklarisali enumeraciju, možete da je koristite na tačno isti način kao i bilo koji drugi numerički tip podataka. Vrednostima enumeracije možete dodeljivati jedino celobrojnu vrednost. Ukoliko želite vrednostima enumeracije da dodeljujete vrednosti tipa stringova, onda bolje razmislite o tome da koristite strukturu u kojoj će nabrajanje biti jedan od članova strukture. Nabrajanje pružaju funkcionalnost garantovanih fiksnih vrednosti i kad se koriste kao indikatori.

Kako se dodeljuju vrednosti strukturi enumeracija?

Tuesday, November 28, 2017

Rad sa WPF prozorima

Ukoliko niste pročitali post “Uvod u WPF – Windows Presentation Foundation“ savetujem vam da to obavezno uradite i steknete neki uvid u WPF; pre nego što pristupite praktičnoj primeni. Ali nemojte dozvoliti sebi da vas to obeshrabri. Učenje WPF shvatite više kao igranje, jer je zaista interesantno šta sve za razliku od Windows Forms možete da radite sa WPF kontrolama. Sve ono što vas je kočilo kod Windows Forms kontrola da napravite, u WPF je to moguće stavljanjem WPF kontrola u WPF kontrole i kombinovanje istih da rade kao jedna. Pitanje je samo koliko ima nešto smisla kombinovati ili ne. Znači mogućnosti su ono što vam treba biti motivacija. Ja sam svestan da čak i danas postoji mnogo hobista a ne programera koji i dalje ne žele da pređu sa Windows Forms na WPF, ali to više nije ni smešno. Neki to rade zato što im je računar previše star dok drugi jednostavno smatraju učenje XAML uz C# komplikovanim. XAML vam jednostavno olakšava linije i linije code-a, vreme i na jednostavan način povećava kreativnost. Da ne spominjem da vi većinu XAML code-a možete da kreirate podešavanjem svojstava u Properties upotrebom miša. Vaše WPF kontrole naravno možete obogatiti i već napisanim stilovima, animacijama i čime god vi želite, stime da vremenom skupljate i čuvate XAML code koji možete koristiti u više vaših aplikacija. Ali uzmite u obzir da nešto što ste pravili u Windows 7, npr. stil za ListBox kontrolu, neće biti isto transparentan na Windows 10. Ponekad će te u vašim stilovima i šablonima trebati promeniti i prilagoditi novijim operativnim sistemima. Iz tog razloga ukoliko pravite WPF aplikaciju u komercijalne svrhe, morate testirati vašu WPF aplikaciju na više računara, Windows operativnih sistema i korigovati razliku. Ali takođe u dokumentaciji morate navesti za koji operativni sistem je pravljena vaša WPF aplikacija, da ukoliko izađe sledeća verzija Windows-a i vaša aplikacija na njemu ne izgleda baš kao što treba da izgleda, vi ne snosite nikakvu odgovornost.   


( Pravljenje WPF aplikacija je kreativnost i igra ) 

Razlike između WPF i Windows Forms su pre svega što WPF omogućava da pravite mnogo robusnije, bolje i lepše prozore. Početnike najviše zbunjuje što pozicioniranje kontrola je u WPF totalno drugačije i zavisi od panela koji su ne vizualni ali omogućavaju automatsku promenu veličine svih kontrola u njima prilikom promene veličine prozora. Tačno je da za mnogo stvari koje ste radili u Windows Forms, to neće raditi na isti način. Ali će raditi na drugi način, često i bolji ili uopšte neće raditi. Poznato je da WPF aplikacije često imaju svoj vlastiti dizajn i da su često okrenute svom vlastitom šarenilu. Čak što više to se i traži od WPF aplikacija, iako ne treba preterivati. Međutim, postavlja se pitanje koliko je to poželjno s obzirom da nas praksa uči da boje prozora treba da kontroliše sam sistem i da korisnik kroz Windows operativni sistem treba da odredi izborom Windows teme kako će i prozori u vašim WPF aplikacijama biti obojeni. Rešenje je da u svojim WPF aplikacijama omogućite kroz opcije vaše aplikacije i takvu mogućnost. Visual Studio .Net je na primer takođe WPF aplikacija koja deli svoj dizajn na Color Theme kao što su Dark, Blue ili Light. Međutim vi možete pronaći mnoštvo kolor tema za Visual Studio .Net na Internet-u i njih koristiti. Npr. pogledajte moje video tutorijale za osnove C# i videćete da se u njima koristi ne standardna Visual Studio .Net kolor tema. Znači i vi možete omogućiti u vašim WPF aplikacijama da korisnici vaše WPF aplikacije koriste i teme za vašu aplikaciju. Imajte samo u vidu da vaše WPF aplikacije mogu koristiti i slabovidi korisnici i oni koji ne vide sve boje, i bilo bi poželjno omogućiti i njima neku temu. Dok učite dajte sebi slobodu i sa bojama i sa oblicima prozora kako samo vaša mašta može učiniti. Ali samo dok učite WPF; koristite sve boje; poenta je da uživate u vlastitoj kreativnosti. Što više budete eksperimentisali; vaše WPF aplikacije će biti bolje. Krenimo prvo od WPF prozora praktičnim primerima.

Šta je ResizeMode svojstvo i kako ga podesiti?

Monday, September 11, 2017

Uvod u WPF – Windows Presentation Foundation

Još od pojave Windows 1.0 koji je na tržište izašao 1985 godine; primarna tehnologija iza mnogih Windows baziranih korisnički interfejsa je bila isključivo bazirana na GDI – Graphic Device Interface. To znači da je celi Windows  operativni sistem generisao grafički prikaz, čak i za štampače i druge uređaje; kroz samo tri osnovna objekta za crtanje. Pen – olovka, Brush – četka i Font. Pojavom Windows 95 i pored toga što taj Windows nije imao direktan pristup memoriji, već se sve programiralo na MS-DOS-u; razvojem računarskih igrica i sve složenijeg hardvera je nastao Microsoft DirectX koji je uspostavljao direktnu komunikaciju između interfejsa i hardvera. Pojavom Windows XP-a; 24 avgusta 2001 godine nastaje poboljšana verzija GDI-a; GDI+; koja je donela značajna poboljšanja kao npr. rastersku grafiku. Ali bez obzira na sva poboljšanja, vi kao programer ste mogli samo da promenite inicijalni prikaz bilo koje standardne kontrole preko predefinisanja Windows događaja koji je prikazivao korisnički interfejs kontrola.


( Microsoft revolucija Framework verzije 3.0 )

Tačno 21 novembra 2006 godine Microsoft korporacija objavljuje .Net Framework verziju 3.0 kodnog imena WinFX kao ugrađenu komponentu Windows Vista-e koji je poput najveće revolucije promenio GDI paradigmu i uveo novitete koje su ostavile programere bez teksta. Iako ta revolucija nije donela ogroman uspeh Windows Vista-i na tržištu; celi svet svakog .Net programera se okrenuo naglavačke dok se uspostavljao novi način razmišljanja. Sa .Net Framework-om verzije 3.0 su došle sledeće tehnologije: 
  • WPF – Windows Presentation Foundation – grafički podsistem namenjen izgradnji aplikacija sa vizualno korisničkim interfejsom baziranom na XAML-u.
  • WFC - Windows Communication Foundation – servisno orjentisan sistem razmene poruka koji omogućava programerima komunikaciju sličnu veb serverima. 
  • WF – Windows Workflow Foundation – tehnologija za definisanje, izvršavanje i upravljanje tokovima omogućavajući programerima razdvajanje logike od pozadinskog izvršavanja komponenti i boljem upravljanju aplikacijom.
  • Windows CardSpace – softverska komponenta koja bezbedno skladišti digitalni identitet osobe i obezbeđuje jedinstven interfejs za konkretnu transakciju poput logovanja na veb sajt.
Umesto da kreirate korisnički interfejs korišćenjem instrukcija napisanim u programskom jeziku, WPF koristi XAML – Extensible Application Markup Language koristeći izuzetne mogućnosti hardverske akceleracije GPU – grafičkih procesnih jedinica ugrađenih u računare. WPF koristi Direct3D za iscrtavanje što znači da koristi GPU – procesor grafičke kartice. Tako vektorska grafika kod većih rezolucija postaje jasnija i bolja dok korisnički interfejs kod malih uređaja poput mobilnih telefona izgleda isto. Hardversko ubrzanje kod WPF ne zahteva postojanje vrhunskog podsistema jer poseduje softverski rendering. Sa programerske tačke gledišta XAML je derivat XML – Extensible Markup Language stime da donosi modifikovan XML. Na taj način XAML elemente korisničkog interfejsa prikazuje kao XML tagove i omogućava paralelni rad grafičkih dizajnera i programera pri kreiranju korisničkog interfejsa. XAML code se čak portuje na sve platforme bez promene. Tako WPF aplikacije mogu biti isporučene kao samostalne aplikacije ili veb aplikacije. Imajte u vidu da se WPF veb aplikacijama se pristupa kroz pregledač. Jedna od najznačajnijih promena koje je doneo WPF je set tehnologija za obradu i štampu dokumenata jer koristi OpenPackaging Convention koji nudi prilagodljive meta podatke, kompresiju dokumenata, digitalne potpise i upravljanje pravima pristupa. 

Arhitektura WPF-a

Friday, June 17, 2016

Događaji u C# programskom jeziku


Event – događaj u C# programskom jeziku je način da klasa ili objekat pruži obaveštenje drugim klasama ili objektima da se nešto važno dogodilo. Klasa koja generiše događaj naziva se publisher – izdavač dok klasa koja prima ili obrađuje događaj se naziva subcriber – pretplatnik. Klasa publisher definiše kad će se generisati događaj dok klasa subscriber odlučuje koja će se akcija preduzeti. Obično klasa pretplatnik sadrži čitavu listu metoda koji se pozivaju kad se izazove događaj i takve metode takođe zovemo subscribers - pretplatničke metode. Kada programeri rade sa događajima, uglavnom se to odnosi na programiranje aplikacije sa grafičkim okruženjem ili web aplikacijama, zato što su takve aplikacije vođene događajima. Na primer kad god vi kliknete na neku stavku u meniju ili neko dugme na formi mišem; vi zapravo aktivirate određeni događaj i na osnovu pokrenutog događaja se izvršava kod koji se nalazi u proceduri događaja za stavku menija ili dugmeta koje ste pritisnuli. Kako će ceo tok programa da se izvršava zavisi od događaja koje korisnik aktivira sve do izlaska iz aplikacije. Zato kažemo da su navedene aplikacije vođene događajima. Događaji se retko koriste u konzolnim aplikacijama ali i u njima mogu da imaju svoju primenu.


( Događaji u C# programskom jeziku )

Deklaracija događaja je jednostavna, stime da su događaji namenjeni da se koriste sa delegatima. Jednostavno tip događaja mora da bude delegat i zato ispred delegata mora da se nalazi ključna reč event. U .Net Framework-u su događaji bazirani na EventHandler delegatu. O delegatima čitajte ovde, a sintaksa za deklarisanje događaja je sledeća:


event DelegatDogadjaja imeDogadjaja;

Kao i kod delegate, pretplata na događaj se vrši operatorom +=

ImeDogadjaja += new DelegatDogadjaja (ImeMetode);

Dok se odjava, otkazivanje pretplate vrši operatorom -=

ImeDogadjaja -= new DelegatDogadjaja (ImeMetode);

Pre generisanja događaja se uvek proverava da li događaj ima null vrednost:

if (ImeDogadjaja != null)
{
    ImeDogadjaja.Invoke();

}

Događaje će te najbolje naučiti koristeći praktične primere. Pogledajte jedan od njih.

Praktičan primer događaja

Thursday, June 16, 2016

Delegati u C# programskom jeziku



Delegati su neka vrsta pokazivača na metode koji su objektno orjentisani i strogo tipizirani. Najjednostavnije rečeno delegat je referenca na metodu. Najlakše će te ih razumeti ukoliko zamislite da su delegati potpis metoda. Delegati vam omogućavaju da se logika vaše aplikacije u vašim metodama potpuno razdvoji od aplikacija koje su ih pozvale. Inače mnogi programeri ne shvataju zašto bi koristili delegate kad mogu pozvati metodu i ne vide njihovu svrhu. Delegati su predviđeni za situacije u kojima metodama želite da prenosite druge metode. Ja razumem da ste vi navikli da metodama prenosite podatke preko parametara ali ne i metode. Međutim postoje situacije u kojima će vaš metod umesto da za obradu podataka, poziva drugi metod i da bi situacija bila još komplikovanija vi čak i ne znate koji je taj drugi metod koji će se pozivati. Jer to možete znati jedino u fazi izvršavanja i zbog toga je neophodno pozivanje metode preko parametra i zato se koriste delegati.



( Delegati u C# programskom jeziku )

Delegati se često koriste kada radite sa nitima, klasama biblioteka i događajima. Delegate koje nameravate da koristite prvo treba da definišete. To u prevodu znači da vi definisanjem delegata saopštavate kompajleru koju vrstu metoda vaš delegat predstavlja. Svaki delegat se definiše unutar imenskog prostora ili klase. Zatim pravite jedan ili više primeraka tog delegata. Delegati mogu biti i sa i bez parametara. Sintaksa za delegata izgleda ovako; prvo se definiše delegat korišćenjem ključne reči delegate:

public delegate string ImeDelegata(string patrametar);

Delegat se može instancirati ovako:

public ImeDelegata mojDelegat = null;

Delegatu se može dodati referenca koristeći += operator:

mojDelegat += TestMetoda;

ili

mojDelegat = new ImeDelegata(TestMetoda);

Delegatu se takođe može ukloniti referenca koristeći -= operator:

mojDelegat -= TestMetoda;

Sve ovo vam može zvučati i izgledati nerazumljivo ali kad pogledate praktične primere upotrebe delegata, shvatićete koliko je to jednostavno. Ono što je najbitnije treba da razumete da se delegati izvršavaju dinamički; u toku izvršavanja; i da delegat može pokazivati na bilo koju metodu koja ima isti potpis kao i delegat. Pogledajte jednostavan primer kako se koristi delegat sa više metoda.

Primer upotrebe delegata

Wednesday, March 16, 2016

Šta su sklopovi?


Još pre pojave .Net platforme, rad sa *.dll datotekama koje izvoze globalne funkcije i *.dll datoteke koje izvoze COM klase, su pravile ogromne probleme, da je Microsoft sa pravom uveo frazu „DLL pakao“ za navedenu problematiku. Aplikacije nisu radile ispravno jer bi novo instalirana aplikacija prebrisala *.dll datoteku koju je koristila druga aplikacija. Ponekad bi instalacija nove aplikacije zamenila novi *.dll starijom verzijom ili novi *.dll datoteka nije bila kompatibilna sa starijom verzijom. Tek od Windows 2000 se uvela mogućnost instaliranja *.dll datoteka u direktorijum aplikacije. Najveći problem je bio što konfiguracija COM komponente nije bila smeštena u samoj *.dll komponenti, nego u bazi Windows Registry. Za ovaj pakao, kao odgovor je stigao sklop.


( GAC - Global Assembly Cashe Folder )

Sklop je osnovna jedinica aplikacije .Net-a. Sklop je samoopisujuća kolekcija koda, resursa i meta podataka. Jednostavno govoreći, sklop je projekat koji se kompajlira u izvršnu datoteku *.exe ili u *.dll datoteku biblioteke. Sklopovi mogu biti privatni ili javni tj. deljeni. Sklop koji se nalazi u direktorijumu vaše aplikacije je privatan sklop, dok deljeni sklop je sklop smešteni u GAC - Global Assembly Cache pomoću alata Gacutil.exe ili Windows Installer-a. To su sklopovi smešteni u C:\Windows\Microsoft.NET\assembly\GAC_MSIL folderu. Deljene sklopove ili sklopove koje se nalaze u GAC-u može da koristi više aplikacija, dok privatni sklop može da koristi samo aplikacija koja sadrži sklop u svom direktorijumu. Da bi ste kreirali deljeni sklop neophodno je da vašem sklopu dodelite Strong name – strogo ime.

var assembly = Assembly.GetExecutingAssembly();
WriteLine(assembly.FullName);
// Result: AssemblyCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Kao što vidite strogo ime se sastoji od imena sklopa, verzije, kulture i parnog ključa. Navedena aplikacija u kodu AssemblyCS nema dodeljeno strogo ime, što definitivno ukazuje da je reč o privatnom sklopu. Najvažnija stvar za jedan sklop je deklaracija sklopa koja sadrži informacije o tome od čega se sastoji sklop. Sklop može da sadrži samo jednu deklaraciju sklopa i ona sadrži sve podatke opisa za sklop. Deklaracija sklopa može da se nalazi u svojoj odvojenoj datoteci ili da se nalazi unutar jednog od modula sklopa.

Šta sadrži sklop?