Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Sefer Algan
Sefer Algan
http://www.seferalgan.com
İletişme geçmek için tıklayın.
71 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  C# / VC#/.NET Sefer Algan
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : C# / VC#/.NET
Yayınlanma Tarihi : 20.9.2003
Okunma Sayısı : 100264
Yorum Sayısı : 19     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 29.3.2024
Turhal Temizer
Mac OS/X Removing CUDA 29.3.2024
Burak Selim Şenyurt
Kurumsal Yazılımcının Oyun Geliştirme ile İmtihanı 29.3.2024
Burak Selim Şenyurt
Matematik ve Oyun Programlama - Missile Command - Final 29.3.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
"Singleton" Tasarım Deseninin(Pattern) C# ile Gerçekleştirilmesi
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
Yazılım mühendisliğinin sanatsal yönü ağır olan "design pattern" kavramını bir çoğumuz mutlaka duymuşuzdur, ama rutin işlerimizden kendimizi boşa çıkarıp bir türlü inceleme fırsatı bulamamışızdır, Bu ve bundan sonraki bir kaç makalelik dizide size kendi terminolojik yapısı içinde deyimleşmiş olan "design pattern" yani "desen tasarımı" kavramını açıklamaya çalışacağım. Elbette açıklamalarımı en çok bilinen tasarım desenleri ile destekleyeceğim. Bu konudaki ilk makalede en basit ve en popüler tasarım desenlerinden biri olan "Singleton" deseninden bahsedip "pattern design" sanatına daha farklı bir bakış açısıyla yaklaşmanızı sağlamaya çalışacağım. O halde işe basit tanımlarla başlayalım.

"Design Pattern" Nedir ?

Bildiğiniz üzere günümüzde yazılım mühendisliği alanında en fazla ses getiren kurgu yazılımın gerçek dünya ile olan ilişkisinin sağlanabilmesidir. Bu ilişki elbette nesne yönelimli programlama tekniği ile sağlanmaktadır. Nesne yönelimli programlama tekniği bilgisayar uygulamalarını soyut bir olgudan çıkararak insanların daha kolay algılayabileceği hale getirmiştir. Öyle görünüyorki, makro düzeyde gerçek hayatı modelleme ile başlayan bu ilişki mikro düzeydede büyük ses getirecektir. Nitekim son yıllarda geliştirilen yapay sinir ağları ile makinelerin çalışma sistemlerinin gün geçtikçe insanların veya canlıların çalışma şekline yaklaştığı görülmektedir. Artık bilgisayarlardan sadece verilen komutları yerine getirmek değil, belirli olaylar ve durumlar karşısında bazı hükümlere varabilmeleride istenmektedir. Burada vurgulamak istediğim nokta şudur : bizler yazılım mühendisleri veya programcılar olarak gerçek hayatı ne kadar iyi modelleyebiliyorsak o kadar başarılı sayılırız. Peki "desgin pattern" konusu nerede devreye girmektedir? İşte benimde gelmek istediğim nokta budur; "desgin patterns" bir modelin tasarımın ustaca tasarlanmasını sağlayacak çeşitli desenlerin oluşturulmasını ve bu desenlerin ihtiyaç dahilinde herhangi bir modelin inşaasında kullanılabilmesini sağlar. "Design pattern" kavramı bir kurallar topluluğundan ziyade bir işi nasıl ve en güzel ne şekilde yapabileceğimiz gösteren yöntemler topluluğudur. Öyleki iyi bir yazılım modelleyicisiyseniz kendi tasarım desenlerinizi oluşturabilir ve bunları diğer ustaların kullanımına sunabilirsiniz. Tasarım desenleri tecrübe ile oluşturulan yapılardır. Bazıları olmazsa olmaz yapılar olmasına rağmen bazıları tamamen yazılımın sanatsal yönünü göstermek için tasarlanmıştır . Örneğin bu yazımın ana konusunu belirleyen "Singleton" tasarım deseni yıllardan beri bir çok kişi tarafından kullanılmıştır. Sizde bu yazıda bu desenin amacını ve nasıl uygulandığını öğrendiğinizde eminimki projelerinizde mutlaka kullanacaksınız. Hemen şunuda belirteyimki bu tasarım deseni sizi uzaya götürmeyecektir, bu yüzden beklentilerinizi biraz daha azaltmanızda fayda var.

O halde "design pattern" yada "tasarım deseni" ni şu şekilde tanımlayabiliriz : Bir tasarım problemini en basit ve en efektif bir şekilde çözüme kavuşturacak yöntemdir.

"Design Pattern" Kaynakları

"Design Pattern" konusunda yazılmış en güzel ve en popüler kaynaklardan biri Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides tarafından kaleme alınmış "Design Patterns: Elements of Reusable Object-Oriented Software"  kitabıdır. Bu kitapta en popüler tasarım desenleri anlatılmış ve bu desenlerin çeşitli uygulamalarına yer verilmiştir. "Desgin pattern" guru'ları olarak anılan bu 4 kişi "Gangs Of Four(GOF)" olarak ta bilinmektedir.  Zaten bahsi geçen kitapta anlatılan tasarım desenlerine de genel olarak GoF tasarım desenleri denilmektedir. Bu yazı ile başlayan yazı dizisinde GOF olarak anılan tasarım desenlerini sizlere aktarıp çeşitli kullanım alanlarını açıklayacağım.

GOF tasarım desenleri genel olarak 3 ana grup altında incelenir. Bu gruplar ve herbir gruptaki tasarım desenlerinin isimleri aşağıda verilmiştir.

1 - Creatinal Patterns Bu desenler bir yada daha fazla nesnenin oluşturulması ve yönetilmesi ile ilgilidir. Örneğin bu yazıda anlatacağım ve bir uygulamanın ömrü boyunca belirli bir nesneden sadece bir adet bulunmasını garantileyen Singleton deseni bu gruba girmektedir. Bu gruptaki diğer desenler ise

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype

     olarak bilinmektedir. Bu desenlerin bir çoğunu ilerleyen yazılarımda ele alacağım. Şimdilik sadece bir giriş yapıyoruz.

    2 - Behavioral Patterns Bu gruptaki desenlerin amacı belirli bir işi yerine getirmek için çeşitli sınıfların nasıl birlikte davranabileceğinin belirlenmesidir.  Bu gruptaki desenler ise aşağıdaki gibidir.
  • Chain of responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template method
  • Visitor 

    3 - Structural Patterns Bu gruptaki desenler ise çeşitli nesnelerin birbirleri ile olan ilişkileri temel alınarak tasarlanmıştır. Bu gruptaki tasarım desenleri ise şunlardır:
  • Adapter
  • Bridge
  • Composite
  • Decorator
  • Façade
  • Flyweight
  • Proxy

    Bu giriş bilgisinden sonra şimdi nesnelerin yaratılması ile ilgili grup olan "Creatinal Patterns" grubunda bulunan "Singleton" desenini açıklamaya başalayabiliriz.

    Singleton Deseni

    Singleton deseni bir programın yaşam süresince belirli bir nesneden sadece bir örneğinin(instance) olmasını garantiler. Aynı zamanda bu desen, yaratılan tek nesneye ilgili sınıfın dışından global düzeyde mutlaka erişilmesini hedefler. Örneğin bir veritabanı uyglaması geliştirdiğinizi düşünelim. Her programcı mutlaka belli bir anda sadece bir bağlantı nesnesinin olmasını isteyecektir. Böylece her geretiğinde yeni bir bağlantı nesnesi yaratmaktansa varolan bağlantı nesnesi kullanılarak sistem kaynaklarının daha efektif bir şekilde harcanması sağlanır. Bu örnekleri dahada artırmak mümkündür. Siz ne zaman belli bir anda ilgili sınıfın bir örneğine ihtiyaç duyarsanız bu deseni kullanabilirsiniz.

    Peki bu işlemi nasıl yapacağız.? Nasıl olacakta bir sınıftan sadece ve sadece bir nesne yaratılması garanti altına alınacak? Aslında biraz düşünürseniz cevabını hemen bulabilirsiniz! Çözüm gerçekten de basit : statik üye elemanlarını kullanarak.

    Singleton tasarım desenine geçmeden önce sınıflar ve nesneler ile ilgili temel bilgilerimizi hatırlayalım. Hatırlayacağınız üzere bir sınıftan yeni bir nesne oluşturmak için yapıcı metot(constructor) kullanılır. Yapıcı metotlar C# dilinde new anahtar sözcüğü kullanılarak aşağıdaki gibi çağrılabilmektedir.

    Sınıf nesne = new Sınıf();

    Bu şekilde yeni bir nesne oluşturmak için new anahtar sözcüğünün temsil ettiği yapıcı metoduna dışarıdan erişimin olması gerekir. Yani yapıcı metodun public olarak bildirilmiş olması gerekir. Ancak "Singleton" desenine göre belirli bir anda sadece bir nesne olabileceği için new anahtar sözcüğünün ilgili sınıf için yasaklanması gerekir yani yapıcı metodun protected yada private olarak bildirilmesi gerekir. Eğer bir metodun varsayılan yapıcı metodu(default constructor- parametresiz yapıcı metot) public olarak bildirilmemişse ilgili sınıf türünden herhangi bir nesnenin sınıfın dışında tanımlanması mümkün değildir. Ancak bizim isteğimiz yalnızca bir nesnenin yaratılması olduğuna göre ilgili sınıfın içinde bir yerde nesnenin oluşturulması gerekir. Bunu elbette statik bir özellik(property) yada statik bir metotla yapacağız. Bu statik metot sınıfın kendi içinde yaratılan nesneyi geri dönüş değeri olarak bize gönderecektir. Peki bu nesne nerde ve ne zaman yaratılacaktır?  Bu nesne statik metodun yada özelliğin içinde yaratılıp yine sınıfın private olan elemanına atanır. Tekil olarak yaratılan bu nesne her istendiğinde eğer nesne zaten yaratılmışsa bu private olan elemanın referasına geri dönmek yada nesneyi yaratıp bu private değişkene atamak gerekmektedir. Sanırım bu deseni nasıl uygulayabileceğimizi kafanızda biraz canlandırdınız. O halde daha fazla uzatmadan desenimizi uygulamaya geçirelim.


    Singleton Deseninin 1. versiyonu

    public class SingletonDeseni
    {
         private static SingletonDeseni nesne = new SingletonDeseni(); 

         private SingletonDeseni() 
         {

         } 

         public static SingletonDeseni Nesne
         { 
              get 
              { 
                   return nesne; 
              } 
         }
    }

    Yukarıdaki sınıf örneğinde SingletonDeseni sınıfı belleğe yüklendiği anda statik olan SingletonDeseni nesnesi yaratılacaktır. Bu nesne yaratılışının new anahtar sözcüğü ile yapıldığına dikkat edin. Eğer siz Main() gibi bir metodun içinden bu nesneyi yaratmaya kalksaydınız derleme aşamasında hata alırdınız. Çünkü public olan herhangi bir yapıcı metot bulunmamaktadır.  Ayrıca
    Siz Main() gibi bir metodun içinden yaratılan bu nesneye

    SingletonDeseni nesne = SingletonDeseni.Nesne;

    şeklinde erişmeniz mümkündür. Böylece yukarıdaki deyimi her kullandığınızda size geri dönen nesne, sınfıın belleğe ilk yüklendiğinde yaratılan nesne olduğu garanti altına alınmış oldu. Dikkat etminiz gereken diğer bir nokta ise nesneyi geri döndüren özelliğin yalnızca get bloğunun olmasıdır. Böylece bir kez yaratılan nesne harici bir kaynak tarafından hiç bir şekilde değiştirilemeyecektir.

    Yukarıdaki SingletonDeseni sınıfını aşağıdaki gibi de yazmamız mümkündür.


    Singleton Deseninin 2. versiyonu
    public class SingletonDeseni
    {
         private static SingletonDeseni nesne = new Singleton(); 

         private SingletonDeseni() 
         {

         } 

         public static Singleton Nesne()
         { 
              return nesne; 
         }
    }

    Dikkat ederseniz iki sınıfın tek farkı oluşturulan nesneye erişme biçimidir. İlk versiyonda nesneye özellik üzerinden erişilirken ikinci versiyonda metot üzerinden erişilmektedir. Değişmeyen tek nokta ise her iki erişim aracının da statik olmasıdır.

    Yukarıdaki her iki versiyonda da biz yaratılan nesneyi

    SingletonDeseni nesne = SingletonDeseni.Nesne;

    yada

    SingletonDeseni nesne = SingletonDeseni.Nesne();

    şeklinde istediğimizde nesne zaten yaratılmış durumda olmaktadır. Oysa bu sınıfı daha efektif bir hale getirerek yaratılacak nesnenin ancak biz onu istediğimizde yaratılmasını sağlayabiliriz. Bu durumu uygulayan Singleton deseninin 3 versiyonunu olarak aşağıda görebilirsiniz.

    Singleton Deseninin 3. versiyonu
    public class SingletonDeseni
    {
         private static SingletonDeseni nesne; 

         private SingletonDeseni() 
         {

         } 

         public static Singleton Nesne()
         { 
             if(nesne == null)
                  nesne = new SingletonDeseni();

              return nesne; 
         }
    }

    Gördüğünüz üzere nesne ilk olarak sınıf belleğe yüklendiğinde değilde o nesneyi ilk defa kullanmak istediğimizde yaratılıyor. İlgili nesneyi her istediğimizde yeni bir nesnenin yaratılmaması içinde

    if(nesne == null)

    şeklinde bir koşul altında nesnenin yaratıldığına dikkat edin.

    Not :  3.versiyonda nesneyi yaratan bir metot olabileceği gibi 1. versiyondaki gibi sadece get bloğu olan özellikte olabilir.

    Herşeye rağmen yukarıdaki 3 versiyonda  bazı durumlar için tek bir nesnenin oluşmasını garanti etmemiş olabilirz. Eğer çok kanallı(multi-thread) bir uygulama geliştiriyoırsanız farklı kanalların aynı nesneyi tekrar yaratması olasıdır. Ancak eğer çok kanallı çalışmıyorsanız(çoğunlukla tek thread ile çalışırız) yukarıdaki sade ama öz olan 3 versiyondan birini kullanabilirsiniz. Ama eğer çok kanallı programlama modeli söz konusu ise ne yazıkki farklı kanalların aynı nesneden tekrar yaratmasını engelemek için ekstra kontroller yapmanız gerekmektedir. Ne yazıkki diyorum çünkü bu yapacağımız kontrol performansı büyük ölçüde düşürmektedir.

    O halde çok kanallı uygulamalarda kullanabileceğimiz Singleton desenini yazalım.

    Singleton Deseninin 4. versiyonu

    public class SingletonDeseni
    {
         private static SingletonDeseni nesne; 

         private static Object kanalKontrol = new Object; 

         private SingletonDeseni() 
         {

         } 

         public static Singleton Nesne()
         { 
             if(nesne == null)
             {
                  lock(kanalKontrol)
                  {
                        if(nesne == null)
                       {
                               nesne = new SingletonDeseni();
                       }
                  }
             }

              return nesne; 
         }
    }

    Yukarıdaki desendeki  püf nokta lock anahtar sözcüğünün kullanımıdır.Eğer nesne ilk defa yaratılcaksa yani daha önceden nesne null değere sahipse lock anahtar sözcüğü ile işaretlenen blok kitlenerek başka kanalların bu bloğa erişmesi engellenir. Böylece kilitleme işlemi bittiğinde nesne yaratılmış olacağı için, kilidin kalkmasını bekleyen diğer kanal lock bloğuna girmiş olsa bile bu bloktaki ikinci if kontrolü nesnenin yeniden oluşturulmasını engelleyecektir. Böylece çok kanallı uygulamalar içinde tek bir nesnenin oluşmasını ve bu nesneye erişimi garanti altına alan Singleton desenini tasarlamış olduk.

    Son olarak lock anahtar sözcüğünü kullanmadan çok kanallı uygulamalar içinde tek bir nesneyi garanti altına alacak deseni yazalım. Aşağıda Singleton desenin 5. versiyonu bulunmaktadır.

    Singleton Deseninin 5. versiyonu

    public class SingletonDeseni
    {
         private static SingletonDeseni  nesne = new SingletonDeseni (); 

         private static SingletonDeseni() 
         {

         } 

         private SingletonDeseni() 
         {

         } 

         public static SingletonDeseni  Nesne
         { 
              get 
              { 
                   return nesne; 
              } 
         }
    }

    Bu versiyonun birinci versiyondan tek farkı yapıcı metodunda statik olmasıdır. C# dilinde statik yapıcı metotlar bir uygulama domeninde ancak ve ancak bir nesne yaratıldığında yada statik bir üye eleman referans edildiğinde bir defaya mahsus olmak üzere çalıştırılır. Yani yukarıdaki versiyonda farklı kanalların(thread) birden fazla SingletonDeseni nesnesi yaratması imkansızdır. Çünkü static üye elemanlar ancak ve ancak bir defa çalıştırılır.

    Son versyion basit ve kullanışlı görünmesine rağmen kullanımının bazı sakıncaları vardır. Örneğin Nesne Özelliği dışında herhangi bir statik üye elemanınız var ise ve ilk olarak bu statik üye elemanını kullanıyorsanız siz istemedğiniz halde SingletonDeseni nesnesi yaratılacaktır. Zira yukarıda da dediğimz gibi bir statik yapıcı metot herhangi bir statik üye elemanı kullanıldığı anda çalıştırılır. Diğer bir sakıncalı durumda birbirini çağıran statik yapıcı metotların çağrılması sırasında çelişkilerin oluşabileceğidir. Örneğin her static yapıcı metot ancak ve ancak bir defa çalıştırılır dedik. Eğer çalıştırılan bir static metot diğer bir statik metodu çağırıyor ve bu statik metotta ilkini çağırıyorsa bir çelişki olacaktır.

    Kısacası eğer kodunuzun çelişki yaratmayacağından eminseniz 5. deseni kullanmanız doğru olacaktır. Eğer çok kanallı uygulama geliştiriyorsanız 4. versiyonu, çok kanallı uygulama geliştirmiyorsanızda 3. versiyonu kullanmanız tavsiye edilmektedir.

    Singleton deseni konulu makalenin sonuna gelmiş bulunmaktayız. Eğer ileride bir gün yukarıdaki desenlerin birini kullanma ihtiyacı hissederseniz hangi deseni ne amaçla kullandığınızı bizimle paylaşırsanız seviniriz.

    Bir diğer "Creational Patterns" deseni olan "Abstract Factory" desenini anlatacağım yazıda görüşmek üzere.

  • Makale:
    "Singleton" Tasarım Deseninin(Pattern) C# ile Gerçekleştirilmesi C#, Visual C# ve .NET Sefer Algan
    • Yazılan Yorumlar
    • Yorum Yaz
    ARA
    26
    2012
    Hocam 5 numaralı yolu izleyerek bir blog sitesi yaptım çok güzel oldu yardımınız için teşekkürler
    MAR
    10
    2011
    Peki hocam misal bunu biz web sayfasında kullandık aynı pcden farklı bir kullanıcıyala sisteme login oldugumuzda aynı deseni birdaha oluşturmak istiyoruz adı üstünde farklı bir kullanıcı bu herşey farklı gelecek ama bu shared oldugundan ilk giren kullanıcnın özelliklerini okuyacaktır doğrumuyum .
    MAR
    10
    2011
    Hocam tşkler anlaşılır ve uygulayıcı anlatmışsınız. Örneğinizi uyguladım. Daha sonrasında kendi projemde kullandım yapıyı istediğim sonucu alıyorum, ileride kullana kullana aşinalık olacaktır.
    KAS
    4
    2010
    Makaleyi okuduktan sonra, yazdığım bir code generator uygulamasında denemeye karar verdim. Sürekli instance almak zorunda olduğum DBConnection adlı bir class'a uyguladım. 3. versiyonu kullandım ve gayet sorunsuz çalıştı. Teşekkür ederim...
    AĞU
    24
    2010
    sayın "ahmet mehmet", sizin cümleniz ile benim anlatmak istediğim aynı sey gibi geliyor bana :) ben farkı bulamadım.
    AĞU
    23
    2010
    Yazıyı yeni okumaya başladım. Sanırım yazarken dikkatinizden kaç birkaç şey olmuş. Mesela;"Singleton deseni bir programın yaşam süresince belirli bir nesneden sadece bir örneğinin(instance) olmasını garantiler.", benim bildiğin sınıflar'dan instance yani nesne yaratılır. Yani bence doğrusu; Belirli bir sınıfın tek örneğinin (only one instance of a class) olmasını garantiler olacak. SAygılarımla.
    AĞU
    7
    2010
    Bu iş böyle anlatılır,teşekkürler hocam.
    MAY
    27
    2010
    Merhaba, bir sorum olacak. asp.net'te singelton pattern'i uyguluyor musunuz? Daha doğrusu static değişken kullanıyor musunuz? statik değişkenler tüm kullanıcılar için sabit oluyor sanırım, bu yüzden asp.net kullanıcıları kesinlikle lock ile kullanmalı. doğru mu?
    TEM
    12
    2008
    Design Patterns konusunu ne zamandır incelemek istemişimdir ancak vakit bulamamıştım. Bu faydalı makale ile giriş yapmış oldum. Aslında projelerimizde kullanıyoruz, mesela bizim bir projemizde konfigürasyon verilerini bu şekilde tasarlayarak cache de tutmuştuk ancak isminin singleton olduğunu yeni öğrendim. Veritabanı bağlantısı içinde kullanılabilir, if (cnn==null) SqlConnection cnn = new SqlConnection(cnnString) return cnn gibi...
    MAY
    29
    2008
    Örneğin bir veritabanı uyglaması geliştirdiğinizi düşünelim. Her programcı mutlaka belli bir anda sadece bir bağlantı nesnesinin olmasını isteyecektir. Böylece her geretiğinde yeni bir bağlantı nesnesi yaratmaktansa varolan bağlantı nesnesi kullanılarak sistem kaynaklarının daha efektif bir şekilde harcanması sağlanır. Nasıl yani? Hocam burda bir hata var sanırım. Connection nesnesi singleton tutulurmu? Prototype olabilir belki ama... Singletonda biri kapar diğeri açar. Birbirini etkiler.
    MAY
    1
    2008
    Sefer Hocam gerçekten süper bir makale olmuş elinize sağlık. görüşmek üzere ...
    AĞU
    26
    2004
    formun kendisi zaten static olmazki sizin tanımlayacağınız sınıf statik olmalı sadece.. tek yapmanız gereken yapıcı metodu private yapmak ve static bir metot yada özellikle return this; demek..
    AĞU
    26
    2004
    ben bu deseni windows form una uygulamak istiyorum. ama Windows Form Designer ın yarattığı form static olmadığı için hata veriyor. bu deseni önceden oluşturduğum bir wondows formunda nasıl kullanabilirim?
    OCA
    28
    2004
    evet haklısınız.. Singleton yerine SingletonDeseni yazmak erekiyor...dikkatli br okuyucu olduğunuz için tebrik ederim...Genelde bu tür yazım hataları kod derlenmeden çok zoe gözükür :)
    OCA
    28
    2004
    Singleton Deseninin 3. versiyonunda sanırım bir düzeltme gerekiyor. Şöyle ki; public static Singleton Nesne() { if(nesne == null) nesne = new SingletonDeseni(); return nesne; } ifadesi şu şekilde olmalı: public static SingletonDeseni Nesne() { if(nesne == null) nesne = new SingletonDeseni(); return nesne; } Değil mi? Bunlar ufak ayrıntılar gibi gözüksede yeni öğrenen insanlar için kafa karıştırıcı olabilir. İyi günler.
    Sayfalar : 1 2 
    Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
    Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
     
    • Bu Konuda Son 10
    • Eklenen Son 10
    • Bu Konuda Geçmiş 10
    Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
    Son Eklenen 10 Makale Yükleniyor
    Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor