<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Diyezon &#187; class helper</title> <atom:link href="http://www.diyezon.com/tag/class-helper/feed/" rel="self" type="application/rss+xml" /><link>http://www.diyezon.com</link> <description>programlama sanatı...</description> <lastBuildDate>Tue, 24 Jan 2012 00:13:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>Delphi 7 ile Şimdiki Delphi Sürümleri Arasındaki Farklar</title><link>http://www.diyezon.com/delphi-7-ile-simdiki-delphi-surumleri-arasindaki-farklar/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=delphi-7-ile-simdiki-delphi-surumleri-arasindaki-farklar</link> <comments>http://www.diyezon.com/delphi-7-ile-simdiki-delphi-surumleri-arasindaki-farklar/#comments</comments> <pubDate>Mon, 13 Aug 2007 22:00:48 +0000</pubDate> <dc:creator>Fatih Tolga Ata</dc:creator> <category><![CDATA[Delphi]]></category> <category><![CDATA[abstract]]></category> <category><![CDATA[class helper]]></category> <category><![CDATA[class static]]></category> <category><![CDATA[delphi.net]]></category> <category><![CDATA[final metodlar]]></category> <category><![CDATA[fonksiyon]]></category> <category><![CDATA[for-in]]></category> <category><![CDATA[inline]]></category> <category><![CDATA[miras]]></category> <category><![CDATA[nesne]]></category> <category><![CDATA[nested classes]]></category> <category><![CDATA[operator overloading]]></category> <category><![CDATA[property]]></category> <category><![CDATA[record]]></category> <category><![CDATA[sealed]]></category> <category><![CDATA[sınıf]]></category> <category><![CDATA[strict private]]></category> <category><![CDATA[strict protected]]></category><guid
isPermaLink="false">http://www.diyezon.com/?p=53</guid> <description><![CDATA[Bildiğiniz gibi VCL, .NET ortamına taşınırken derleyici bazında bir çok değişikliğe ve geliştirmeye gidildi. Bu geliştirmeler, hem Delphi.NET derleyicisini hem bildiğimiz klasik Delphi for Win32 derleyicisini etkiledi. Tabi bu geliştirmeler, en çok biz programcıların işine yaradı. Bu makalemizde bu yeniliklere değinmeye çalışacağız. Bunlardan bir kısmını önceki makalelerimizde ayrıntılı olarak işlemiştik. Burada sadece bu sitede bahsetmediğimiz [...]]]></description> <content:encoded><![CDATA[<p
align="justify">Bildiğiniz gibi VCL, .NET ortamına taşınırken derleyici bazında bir çok değişikliğe ve geliştirmeye gidildi. Bu geliştirmeler, hem Delphi.NET derleyicisini hem bildiğimiz klasik Delphi for Win32 derleyicisini etkiledi. Tabi bu geliştirmeler, en çok biz programcıların işine yaradı.</p><p
align="justify">Bu makalemizde bu yeniliklere değinmeye çalışacağız. Bunlardan bir kısmını önceki makalelerimizde ayrıntılı olarak işlemiştik. Burada sadece bu sitede bahsetmediğimiz kısımlar bahsedilecek ve önceden bahsettiklerimize linkler içerecektir.</p><p><span
id="more-53"></span></p><h1>Operator Overloading:</h1><p
align="justify">Buradaki makalede ayrıntılı olarak işlenmiştir: <a
href="http://www.diyezon.com/?p=52">http://www.diyezon.com/?p=52</a></p><h1>Inline Belirleyicisi:</h1><p
align="justify">Derleyiciye tavsiye niteliğinde olan bu belirleyici (ya da direktif), fonksiyon ya da prosedürün kod çıktısında, çağrıldığı yere gömülmesini sağlar. Tavsiye niteliğinde diyorum çünkü, eğer prosedür ya da fonksiyon inline yapılmaya müsait değilse derleyici bu direktifi es geçecektir.</p><p
align="justify">Inline yapılmış prosedür ya da fonksiyon, &quot;call&quot;, &quot;ret&quot; gibi assembler komutlarına ihtiyacı olmadığı gibi, stack&#8217;ın push ve pop ile yedeğinin de alınmasına ihtiyaç yoktur. &Ccedil;ünkü inline yapılan fonksiyon, direk olarak çağrıldığı kısma yerleşecektir. Halbuki normal fonksiyonlarda call komutu ile hafızada başka bir kod kısmına dallanmaktadır. Ve burada stack&#8217;ın yedeği alınıp, fonksiyon sonunda yedek tekrar yüklenmektedir. Daha fazla bilgi için (<a
href="http://www.diyezon.com/?p=45">Delphi ve C++ Builder ile Assembler</a> ve <a
href="http://www.diyezon.com/?p=47">Fonksiyon &Ccedil;ağırım Mekanizmaları</a>).</p><p
align="justify">Inline prosedür ve fonksiyonda bu gibi işlemler yapılmadığından kod daha hızlı çalışacaktır. Ama her fonksiyon çağırımında fonksiyon kodları direk olarak çağrıldığı yere yerleşeceğinden, programınızın boyutu biraz büyüyecektir. Tanımlaması normal fonksiyon ve prosedür gibi olup sadece son tarafa inline belirleyicisi eklenir:</p><pre>
<pre class="brush: delphi">procedure MyProc(x:Integer); inline;
begin
    // ...
end;</pre></pre><h1>Strict Private</h1><p
align="justify">Sınıf kavramına katılan bu alan tipi, normal private alan gibidir. Tek fark bu alan daha da gizlidir <img
src='http://www.diyezon.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Bu dediğimizin anlaşılabilmesi için private alanın ne olduğu bilinmesi gerek. Tabi ondan önce sınıfların ne olduğunu biliyorsunuzdur umarım(<a
href="http://www.diyezon.com/?p=40">Bileşen Yazım Klavuzu</a>nun ilk bölümleri sınıfları anlatmaktadır).</p><p
align="justify">Private sınıflar normalde, aynı unit içindeki başka sınıflar içinden erişilebilir. Strict Private ise gerçekten gizler. Yani aynı unit içinde bile olsa başka bir sınıf strict private alana erişemez.</p><h1>Strict Protected</h1><p
align="justify">Private için geçerli olan durumun aynısı protected için de geçerlidir. Strict Protected ise sadece aynı sınıf ve sınıfın çocukları tarafından görülebilirler. Aynı unit bile olsa başka bir sınıf bu alanı göremez.</p><h1>Metodlu Record&#8217;lar</h1><p
align="justify">Artık Recordlar için private, public gibi alanlar tanımlayıp procedure, function, constructor gibi metodlar tanımlayabiliyoruz. Ayrıca property&#8217;ler de tanımlanabiliyor. Yani aynı sınıflar gibi&#8230;</p><pre>
<pre class="brush: delphi">type
  TMyRecord = record
    type
      TBirTip = Integer; //tip tanımlaması
    var
      BirAlanDegiskeni: TColor;
    class var
      StatikDegisken: Integer;
    procedure BirProsedur();
    constructor Create;
    property Color: TColor read BirAlanDegiskeni write BirAlanDegiskeni;
    class property StatikOzellik: TBirTip read StatikDegisken write StatikDegisken;
  end;

constructor TMyRecord.Create;
begin

end;

procedure TMyRecord.BirProsedur;
begin
  ShowMessage(IntToStr(Color));
end;</pre></pre><h1>Abstract ve Sealed Sınıflar</h1><p
align="justify">Önceden abstract sınıf tanımlanamıyordu. Bunun yerine interface&#8217;ler kullanılıyordu. Ama bu her zaman işe yaramayabiliyor. Yabancı olanlar için kısaca abstract, kendisinde herhangi bir tanımlama ve kod bulunayan, <strong>kod kısmı</strong>, sınıflar için çocuk sınıflarda, metodlar için ise mirasçı metodlarda tanımlı olan bir yapıdır.</p><pre>
<pre class="brush: delphi">type
  TAbstractClass = class abstract
    procedure SomeProcedure;
end;</pre></pre><p
align="justify">Bu sınıfın kod tanımlaması TAbstractClass sınıfından türeyecek olan sınıflarda yapılacaktır.</p><p
align="justify">Sealed sınıflar ise, kısır sınıflardır. Yani artık sınıf hiyerarşisinde en sonda bulunan ve kendisinden herhangi bir türetme yapılamayacak olan sınıflardır.</p><pre>
<pre class="brush: delphi">type
  TSealedClass = class sealed
    procedure SomeProcedure;
end;</pre></pre><p
align="justify">Bu sınıftan başka bir sınıf türetilemez.</p><h1>Class Helper&#8217;lar</h1><p
align="justify">Buradaki makalede ayrıntılı olarak işlenmiştir: <a
href="http://www.diyezon.com/?p=50">http://www.diyezon.com/?p=50</a></p><h1>Class Statik Tipler, Değişkenler, Özellikler, Sabitler, Metodlar</h1><p
align="justify">Bazen olurki nesneyi tanımlamadan, sınıf içinde bulunan bazı değerlere erişilmesini istersiniz. Bu durumda erişilmesini istediğiniz şeyi, statik olarak tanımlamalısınız. Mesela aşağıdaki örneğe bakalım:</p><pre>
<pre class="brush: delphi">type
  TAClass = class
    strict private
      class var
        StatikDegisken: Integer;
    strict protected
      class function GetStatikOzellik: Integer; static;
      class procedure SetStatikOzellik(val: Integer); static;
    public
      class property StatikOzellik: Integer read GetStatikOzellik write SetStatikOzellik;
  end;

TAClass.StatikOzellik := 879;</pre></pre><p
align="justify">Burada gördüğünüz gibi TAClass sınıfından bir nesne oluşturmadan içindeki bir özelliğie eriştik. Class Static tekniğini kullanırken dikkat etmeniz gerken bir kaç önemli nokta şudur:</p><ul><li>Statik metod&#8217;lar içinde artık Self değişkenini kullanamazsınız. &Ccedil;ünkü sınıfa referans içeren bir nesne yoktur.</li><li>Statik metodlar ve özelliklerde ancak ve ancak statik olan değişken ve metodları kullanabilirsiniz.</li><li>Statik metodları virtual ya da dynamic olarak tanımlayamazsınız.</li></ul><p
align="justify">Bunun dışında bir sınıf içinde statik sabitler ve statik tipler de oluşturulabilir:</p><pre>
<pre class="brush: delphi">type
  TBirClass = class
  private
    type
      TBirStatikRecord = record
        BirAlan: string;
      end;
  public
    class var
      BirStatikRecord: TBirStatikRecord;
    const StatikSabit = &#039;Burada class kelimesini kullanmanıza gerek yok!!&#039;;
  end;

....
ShowMessage(TBirClass.StatikSabit);</pre></pre><p
align="justify">gibi&#8230;</p><h1>İç içe Geçmiş Sınıflar &#8211; Nested Classes</h1><p
align="justify">Artık bir sınıf tanımlamasının içinde başka bir sınıf tanımlanabiliyor:</p><pre>
<pre class="brush: delphi">type
  TDistakiSinif = class
  public
    type
      TIctekiSinif = class
      public
        procedure IctekiMetod;
      end;
      procedure DistakiMetod;
  end;

procedure TDistakiSinif.TIctekiSinif.IctekiMetod;
begin
  ...
end;</pre></pre><h1>Final Metodlar</h1><p
align="justify">Sealed sınıflar gibi final metodlar da bir sınıfın çocuk sınıflarında, final olarak tanımlanmış olan virtual metodun miras  alınamadığını ifade eder. Mesela:</p><pre>
<pre class="brush: delphi">TSonMetodluSinif = class(TBirAtaSinif)
public
  procedure SonMetod; override; final;
end;</pre></pre><p
align="justify">Bu tanımlamadan sonra artık SonMetod isimli metod, &quot;TSonMetodluSinif&quot; isimli sınıfın çocuk sınıfları tarafından override yapılamayacaktır. Final metodların sadece virtual metodlarda işe yaradığına dikkat edin.</p><h1>For-In Döngüsü</h1><p
align="justify">Artık bir dizi veya kolleksiyon içinde for-in döngüsü ile iterasyon yapılabilmekte:</p><pre>
<pre class="brush: delphi">
for DiziElemani in BirDizi do
begin
  ....
end;

for BirKarakter in BirString do
begin
  ...
end;

for BirKumeElemani in BirKume do
begin
  ...
end;

for BirKolleksiyonElemani in BirKolleksiyon do
begin
  ...
end;</pre></pre><h1>Sonuç</h1><p
align="justify">Yeni gelen özelliklerin unutmamış isem tamamına değinmeye çalıştım. Bunlara ek olarak Highlander çıktığında generic yani parametrize tiplere de ayrı olarak değineceğiz. Generics&#8217;in nasıl bir şey olduğunu merak edenler <a
href="http://www.diyezon.com/?p=48">buraya</a> tıklayarak meraklarını giderebilirler.</p><p
align="justify">Bunlarla ilgili uygulama yapıp geliştirmek sizlere kalmış. Buradaki bilgiler önfikir mahiyetindedir. Derleyici bazındaki yenilikler bunlar olmakla birlikte, VCL ve diğer alanlarda da bir çok yeniliğe gidilmiştir. Yeri geldikçe bunlardan da bahsedebiliriz.</p><p
align="justify">Yorumlarınız önemlidir, bekliyorum.</p></p> ]]></content:encoded> <wfw:commentRss>http://www.diyezon.com/delphi-7-ile-simdiki-delphi-surumleri-arasindaki-farklar/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Delphi.NET&#8217;in Yeni Oyuncağı &#8220;Class Helper&#8221;</title><link>http://www.diyezon.com/delphinetin-yeni-oyuncagi-class-helper/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=delphinetin-yeni-oyuncagi-class-helper</link> <comments>http://www.diyezon.com/delphinetin-yeni-oyuncagi-class-helper/#comments</comments> <pubDate>Wed, 01 Aug 2007 13:14:56 +0000</pubDate> <dc:creator>Fatih Tolga Ata</dc:creator> <category><![CDATA[Delphi]]></category> <category><![CDATA[.net]]></category> <category><![CDATA[class helper]]></category> <category><![CDATA[delphi.net]]></category> <category><![CDATA[nesne]]></category> <category><![CDATA[sınıf]]></category><guid
isPermaLink="false">http://www.diyezon.com/?p=50</guid> <description><![CDATA[.Net ortamı için sadece Delphi&#8217;de bulunan bir nesne özelliği ile tanışalım bugün, Class Helper(Sınıf Hizmetçisi, Yardımcısı, ya da ne isim verirseniz.). C# kullanıcıları, 2.0 sürümü ile benzer bir tip olan &#34;Partial Type&#34; ile tanıştılar. Ama partial tipler hali hazırda derlenmiş kodlar üzerinde işlem yapamazlar. Ama class helper&#8217;lar yapabilirler! Yani derlenmiş bir assembly&#8217; de bulunan bir [...]]]></description> <content:encoded><![CDATA[<p
align="justify">.Net ortamı için sadece Delphi&#8217;de bulunan bir nesne özelliği ile tanışalım bugün, Class Helper(Sınıf Hizmetçisi, Yardımcısı, ya da ne isim verirseniz.). C# kullanıcıları, 2.0 sürümü ile benzer bir tip olan &quot;Partial Type&quot; ile tanıştılar. Ama partial tipler hali hazırda derlenmiş kodlar üzerinde işlem yapamazlar. Ama class helper&#8217;lar yapabilirler! Yani derlenmiş bir assembly&#8217; de bulunan bir sınıf üzerine de class helper yazılabilir.</p><p
align="justify"> Nedir bu Class Helper? Yenilir mi, içilir mi, grameri nasıldır, ne işimize yarayacak? Bütün bu soruların cevaplarını bu kısa makalemizde vermeye çalışacağız.</p></p><p><span
id="more-50"></span></p><h1>Giriş</h1><p
align="justify">Hemen konuya girelim. Class Helper -yada sınıf hizmetçisi, ya da yardımcısı-, kendisinde bulunan bütün alanlarıyla, yardımcı olduğu sınıfı genişleten bir yapıdır, şeklinde tanımlanabilir. Class helper, mevcut bir sınıfı değiştirmeden veya bu sınıftan yeni bir sınıf türetmeden, bu sınıfa yeni özellikler, metodlar katmaya yarar. Böylece mevcut sınıfta hiç bir müdahaleye gerek kalmadan ve yeni bir sınıf türetmeden, mevcut sınıfımız istediğimiz şekilde şekillenecektir.</p><p
align="justify">Borland bu yapıyı, VCL kütüphanesini .NET ortamına geçirirken ihtiyaç duymuştur. &Ccedil;ünkü Win32&#8242;de tanımlanmış olan bir sınıf, hem .Net&#8217;i desteklemesi lazım hem de mevcut yapısını koruması lazım. İşte class helper, nesne programlamaya böyle bir esneklik getirmiştir.</p><h1>Grameri</h1><p
align="justify">Şimdi bu yapının grameri nasıldır ona bakalım:</p><pre>
<pre class="brush: delphi">TSinif = class
public
  procedure BirProsedur;
end;

TSinifYardimcisi = class helper for TSinif
public
  function BirFonksiyon: Boolean;
end;</pre></pre><p
align="justify">Ardından bu sınıfımızdan bir nesne oluşturalım:</p><pre>
<pre class="brush: delphi">var
  Nesne: TSinif;
begin
  Nesne := TSinif.Create;
  Nesne.BirFonksiyon;
end;</pre></pre><p
align="justify">Farkında iseniz TSinif adlı sınıfımızda &quot;BirFonksiyon&quot; isimli bir fonksiyon bulunmamakta. Ama bir class helper tanımlayarak, olmayan bu fonksiyonu sınıfımıza ekledik.</p><h1>Yanlış Kullanımlar ve Sınırlar</h1><p
align="justify">Nasıl ki programlamada her tekniğin bir yapabildiği olduğu gibi, tekniğe ters olan bazı şeyler de vardır. İlk önce yanlış kullanımlara bakalım:</p><ul><li>Mevcut .NET sınıflarını, kod tanımlamasını değiştirmeden genişletmeye çalışmak.</li><li>Mevcut .NET sınıflarını onlardan miras almadan genişletmeye çalışmak.</li><li>Sealed sınıfları genişletmeye çalışmak. (Sealed sınıflar, sınıf hiyerarşisinde kısır sınıflar olarak bilinirler. Yani sealed sınıflardan herhangi bir başka sınıf türetilemez.)</li><li>Büyük bir sınıf tanımlamasını birden fazla kaynak dosyaya rast gele bir şekilde bölmek.</li></ul><p
align="justify">Her ne kadar bunları yapabilseniz de, tavsiye edilmez ve yanlış kullanım kategorisindedir. Özellikle bir sınıf sealed olarak tanımlanmışsa, bunun elbette bir sebebi vardır. Bunu genişletmek, istenmeyen sonuçlara sebebiyet verebilir.</p><p
align="justify">Yapamayacağınız şeyler ise şunlardır:</p><ul><li>Bir class helper, genişlettiği sınıfın &quot;strict private&quot; olarak tanımlanmış alanına erişemez. Gerçi Delphi programcıları için bu, ne kadar doğru bir sınırlandırma olduğu tartışma konusu olmuştur ve olmaktadır.</li><li>Bir class helper, genişlettiği bir sınıf için interface tanımlayamaz.</li><li>Bir class helper için başka bir class helper tanımlanamaz.</li></ul><p
align="justify">Tabi yapılan en büyük yanlışlıklardan bir tanesi de, class helper&#8217;ları ayrı dosyada tanımladıktan sonra bunları ana sınıfın unitinde implementation alanında değil de interface alanında uses&#8217;a eklemek olacaktır. Bu da çapraz başvurudan dolayı hataya sebep olacaktır. &Ccedil;ünkü eklediğiniz helper unitinde interface alanında zaten uses kısmında ana sınıfın uniti eklenmiş durumdadır. Bu esasen class helper&#8217;larla alakalı bir hata olmadığından yukarıdaki maddelere eklemedim.</p><h1>Faydaları</h1><p
align="justify">Eğer birden fazla kişi aynı sınıf üzerinde çalışıyorsa, class helper&#8217;lar gerçekten çok işe yaramaktadır. Class helper kullanılmadığında, bir çok programcının yazdığı sınıfları bir sınıfta birleştirmek için bir kişinin uğraşması gerekmektedir. Bunu yapacak kişi de her yazılan sınıftaki özellik ve metodlara aşina olması şarttır. Class helper kullanıldığında, her programcı, sınıf içinde kendine ayrılmış kısım ile ilgili bir class helper yazar ve bir unit&#8217;e kaydeder. Geriye kalan sadece bunları uses&#8217;a eklemek ve derlemektir. Derleme işleminde, derleyici bu class helper&#8217;ları mevcut sınıfa ekleyerek birleştirip bir sınıf yapacaktır.</p><p
align="justify">Eğer sınıfınız bazı özel araçlar ile oluşturulmuş ise, class helper kullanarak bu oluşturulmuş olan kodda değişiklik yapmanıza gerek kalmayacaktır. &Ccedil;ünkü bu araç ile bir daha kodu üretmeniz gerektiğinde yazdığınız değişikliklerin kaybolmasına sebep olacaktır. Class helper kullanmadan bu tarz bir koda müdahale etmeniz zordur.</p><p
align="justify">Düşünün ki, ürettiğiniz yazılımın bir kaç versiyonu olacak. Mesela profesyonel, standart, temel(basic) gibi versiyonlarınız olacak. Profesyonel&#8217;de olan özellikler standart&#8217;a göre daha fazla olacak. Standartta olan özellikler de temel versiyona göre daha fazla olacak. Class helper kullanmadığınızda bu versiyonları oluşturmak için ayrı ayrı sınıflar oluşturmalısınız. Bu durumda temel sınıftaki bir özellik veya metodun değişmesi, bug&#8217;ların giderilmesi gibi işlemlerde aynı şeyleri hepsi için tek tek yapmalısınız. Birini birinden türetseniz dahi, mesela temel sınıfı ata sınıf kabul edip, diğerlerini ondan türetseniz dahi bu işinizi görmeyecek hatta daha da sıkıntılı bir duruma sokabilecektir. &Ccedil;ünkü nesnelerin kullanımı esnasında, ister istemez bir çok sorunla yüzleşeceksiniz. Bu sorunları çözmek için ek arayüzler ve sınıflar tanımlamak zorunda kalabileceksiniz. Halbuki class helper kullanıldığında sadece en temel olan sınıfı yazarsınız ve diğer sınıfları class helper olarak tanımlarsınız. Böylece mesela programın temel sürümünü derlemek için profesyonel ve standart class helper&#8217;larını projeden çıkarmanız yeterli olacaktır. Profesyonel sürümünü derleyeceğinizde ilgili class helper&#8217;ı projenize eklersiniz ve her şey bir çırpıda halledilmiş olur.</p><p
align="justify">Belki faydaları daha da artırılabilir. Ama kafanızda bir fikir oluşması için bunlar yeterli.</p><h1>(Güncelleme): Class Helper Önceliği</h1><p
align="justify">Anlatmayı unuttuğum bir kısım şimdi aklıma geldi <img
src='http://www.diyezon.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p
align="justify">Diyelim ki şöyle bir sınıf ve class helper olsun:</p><pre>
<pre class="brush: delphi">TSinif = class
private
  procedure MesajGoster;
public
  procedure BirSeylerYap;
end;

TSinifHelper = class helper for TSinif
public
  procedure MesajGoster;
end;</pre></pre><p
align="justify">Gördüğünüz gibi hem sınıfta hem de helper sınıfta da aynı isimde bir metod var. Ama sınıfta private olarak tanımlanmış bir metod, helper&#8217;da public olarak tanımlanmıştır. Peki burada hangisi geçerlidir? &quot;MesajGoster&quot; metodu tetiklendiğinde hangi metod çalıştırılacaktır? Aşağıdaki koda bakalım:</p><pre>
<pre class="brush: delphi">procedure TSinif.BirSeylerYap;
begin
  MesajGoster;
end;</pre></pre><p
align="justify">TSinif&#8217; ta bulunan &quot;BirSeylerYap&quot; metodumuzu bu şekilde yazdık. BirSeylerYap metodu çalıştığında, &quot;MesajGoster&quot; metodunu çağıracak. İşte burada çağrılacak olan daima önceliği fazla olan helper sınıftır. Yani burada TSinif.MesajGoster değil, TSinifHelper.MesajGoster metodu çağrılacaktır. Yani <strong>öncelik daima helper sınıfa aittir</strong>.</p><p
align="justify">Peki iki helper sınıf arasındaki öncelik neye göre belirlenir? Mesela yukarıdaki sınıfa ve helper&#8217;a ek olarak şunu da yazsa idik:</p><pre>
<pre class="brush: delphi">TSinifHelper2 = class helper for TSinif
public
  procedure MesajGoster;
end;</pre></pre><p
align="justify">TSinif isimli sınıfımızın MesajGoster metodu çağrıldığında hangi metod çağrılacaktır?</p><p
align="justify">Bundan önce class helper&#8217;ların daima sınıflardan öncelikli olduğunu gördük. Bu yüzden sınıfı eliyoruz. Diyelim ki TSinifHelper , TSinifHelper2&#8242;den daha önce yazılmış, yani daha yukarıda yazılmış. Bu durumda hangisi en sonra ya da en altta tanımlıysa onun sözü geçer. Yani <strong>en son tanımlanan helper daha önceliklidir</strong>.</p><p
align="justify">Bir öncelik daha kafamızı karıştırabilir. Diyelimki TSinifHelper, untHelper1 adlı dosyada ve TSinifHelper2 ise untHelper2 adlı dosyada. Bu durumda hangisi daha öncelikli olacak? Bu öncelik değeri, aslında bir önceki ile aynı mantıkta. <strong>Hangisi uses kısmında en sonda ise o önceliklidir</strong>.</p></p></p><h1>Sonuç</h1><p
align="justify">Bence, Delphi.NET ile birlikte gelen en iyi özelliklerden birisi class helper&#8217;lar. Özellikle takım çalışmasında büyük bir kolaylık sağlıyor. Sınıfın bir kısmını bir kişi, diğer tarafta sınıfın diğer kısmını yazan kişilerden habersiz görevini yerine getirebiliyor. Belki ilk başta klasik sınıf bilgimizden biraz garip gelebiliyor ama kullandıkça, ne kadar yararlı olduğunu görebiliyoruz.</p><p
align="justify">Sorularınız olduğunda buradaki yorum kısmına ya da delphiturkiye forumlarında Delphi.Net kısmına iletebilirsiniz.</p><p
align="justify">Kolay gelsin.</p></p> ]]></content:encoded> <wfw:commentRss>http://www.diyezon.com/delphinetin-yeni-oyuncagi-class-helper/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 1/9 queries in 0.012 seconds using memcached
Object Caching 388/402 objects using memcached

Served from: www.diyezon.com @ 2012-02-08 12:26:04 -->
