Izlaskom druge bete Visual Studio 2008, predstavlja nam još jednu novinu u C# – Partial Methods. Razmišao sam kako da prevedem ovaj pojam, mogao se prevesti kao: nepotpune metode, nekompletne metode, ali čini mi se da je naziv Parcijalne metode nekako najbolje zvuči.
Naime o čemu se radi:
Nabrojimo nekoliko osobina koje karakterišu ovo osobinu:
- Parcijane metode se označavaju klasifikatorom partial
- Parcijalne metode uvijek vraćaju vrijednost void
- Parcijalne metode deklarišu se unutar parcijalni klasa
- Parcijalne metode mogu biti statičke
- Parcijalne metode mogu imati parametre
- Parcijalne metode uvijek se deklarišu kao privatne
- Parcijalne metode ne moraju uvijek imati definiciju
Ova zadnja osobina podsjeća me na deklaraciju metode u C++, deklaracija postoji, a definicija metode može, a i nemora biti.
Deklaracija i definisanje parcijane metode:
partial class Klasa { static partial void ParcijalnaMetoda(string str); //Deklaracija metode //.... static partial void ParcijalnaMetoda(string str) { //implemenacija parcijalne metode } }
Upotreba parcijalnih metoda
Obzirom da je ovo proširenje jezika C# još u beta fazi, vrlo je malo primjera koji koriste ovu sobinu. Glavna značajka ove osobine je upravljanje događajima na manje zahtjevcan način. U principu kada upravljamo događajima provodimo proceduru formiranja delegata implementacije i sl. Na ovaj način možemo implementirati parcijalnu metodu koja simulira implementaciju događaja, na jednostavan način. Opće je poznato da je implementacija i upravljanje događajima memorijski zahtjevno. Najbolje je kroz primjer opisati osnovnu (ne i jedinu ) upotrebu parcijalne metode.
Pretpostavimo da u klasi imamo jednu osobinu naziv koja kod svog postavljanja može da poziva niz metoda. Npr.
partial class Partner { string naziv; public string Naziv { get { return naziv; } set { OnUpdateNaziv(); naziv = value; } } partial void OnUpdateNaziv(); }
Implementacija OnUpdateNaziv(), može a i ne mora biti definisano. U oba slučaja kod će se iskompajlirati bez greške, a IL kod će u svakom od slučajeva biti drugčiji. Ako implementacija metode OnUpdateNaziv() nije definisana IL će izgledati kao da uopće nismo ni napisali poziv metode . A ako je pak implementirana definicija metode, IL će sadržavati poziv metode. Kada bi koristili delegate, kao zamjenu za parcijalne metode IL kod bi morao zadržavati definiciju, kao i to da bi kompailer javio grešku, a kao najznačajnija činjenica je da IL optimizira memorijski prostor.
Najveća upotreba ove osobine C#, biti će korištena kod primjene LINQ, i klase DataContext ili njenih izvedenica. Kao što sam u prethodnom postu napisao, sva prošrenja koja se dešavaju u budućoj verziji C# 3.0 više manje vezane su uz primjenu LINQ.
Gdje pronaći više informacija o ovom proširenju
Više o ovom možete pronaći na linkovima napisanim dolje:
http://blog.benhall.me.uk/2007/07/partial-methods-in-c-30-and-vbnet-90.html
http://blogs.msdn.com/wesdyer/archive/2007/05/23/in-case-you-haven-t-heard.aspx
http://www.davidhayden.com/blog/dave/archive/2007/07/19/PartialMethodsCodeGeneration.aspx
Pingback: LINQ – .NET Language Integrated Query I Dio « Bahrudin Hrnjica Web Page
Pingback: LINQ – .NET Language Integrated Query II Dio « Bahrudin Hrnjica Blog
Pingback: LINQ – .NET Language Integrated Query III Dio « Bahrudin Hrnjica Blog