Partial Methods (Parcijalne Metode – novine u C# 3.0)


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:

  1. Parcijane metode se označavaju klasifikatorom partial
  2. Parcijalne metode uvijek vraćaju vrijednost void
  3. Parcijalne metode deklarišu se unutar parcijalni klasa
  4. Parcijalne metode mogu biti statičke
  5. Parcijalne metode mogu imati parametre
  6. Parcijalne metode uvijek se deklarišu kao privatne
  7. 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://community.bartdesmet.net/blogs/bart/archive/2007/07/28/c-3-0-partial-methods-what-why-and-how.aspx

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

About Bahrudin Hrnjica

PhD in Mechanical Engineering, Microsoft MVP for .NET. Likes .NET, Math, Mechanical Engineering, Evolutionary Algorithms, Blogging.

Posted on 08/08/2007, in .NET, C# and tagged , . Bookmark the permalink. 3 Comments.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s