c# Delegate nedir?

Delegeler methodların referanslarını tutan tiplerdir. Böyle söyleyince çok anlamlı olmuyor, değil mi? Bunu anlatmak için örnek kullanmak daha iyi olacak sanırım.

Öncelikle Şöyle bir delege tanımı yapalım;

        int a = 0;
        public delegate int mydelegate(int i1, int i2);

delegate tanımımız hazır. Şimdi de methodlarımızı oluşturalım. Kolay şeyler olsun. Birisi iki sayıyı çarpsın, diğeri toplasın;

        public int topla(int x, int y)
        {
            a = a + 1;
            return x + y;
        }
        public int carp(int x, int y)
        {
            a = a * 3;
            return x * y;
        }

Not  : a değişkenini ve methodlar içindeki kullanımını lütfen şimdilik kafamıza takmayalım. Şimdilik onlar yokmuş gibi düşünelim. a değişkenini bir sonraki örnekte kullanacağız.

Burada dikkat edilmesi gereken en önemli unsur, tanımladığımız methodların return değerleri ve girilen parametrelerin sayısı, sırası ve tipleri aynı olmalıdır. Dikkat ederseniz delege tanımımızın return tipi int, tanımladığımız metodların da öyle, yine dikkat ederseniz delegate tanımımız 2 adet int parametre alıyor, metodlarımız da öyle.

Şimdi delegeyi bir butonun onclick eventında nasıl kullandığımıza bakalım. Şimdilik ben tanımladığımız metodlardan topla metodunu kullanacağım.

        private void button1_Click(object sender, EventArgs e)
        {
            mydelegate d = new mydelegate(topla);
            MessageBox.Show(d(3,4).ToString());
        }

MessageBox bize popup olarak 7 değerini verecektir.

Şimdi madem kullanmayacaktık carpma metodunu niye tanımladık öyle değilmi? Delegeler sadece tek metodu refere etmek zorunda değildirler. Aynı anda 1 den fazla method refere edilebilir. Aşağıda yine örnek ile anlatmaya çalışalım. Bu örneğimizde a değişken tanımımızı da kullancağız.

        private void button1_Click(object sender, EventArgs e)
        {
            mydelegate d = new mydelegate(topla);
            d += carp;
            MessageBox.Show(d(3,4).ToString());
            MessageBox.Show(a.ToString());
        }

Butona basıldığında d delegemizin sadece çarma işlemini yaparak ilk çıkacak messageboxta 12  değerini verdiğini göreceksiniz. Fakat 2. messagebox bize 3 değerini gösterecek.

Demekki neymiş aslında delegeye tanımladığımız 2 metodumuz da çalışmış. Delegeye yeni bir methot eklemek istediğimizde gördüğünüz gibi += operatorunu kullandık. Bu size birşey hatırlatıyor mu? Genelde bir butonun örneğin oncilick eventına ekleme yaparken de bu operatörü kullanıyoruz değil mi? Evet. Çünkü eventlar da aslında delege tanımlarıdır.

Delegelerde birden fazla method ekleyebildiğimizi gördük. Bu metodları -= operatörü kullanarak çıkarabilirizde.

Aşağıda bu konu ile ilgili de örneğimiz var. Bunu deneyerek çıktılarını tahmin etmeye çalışın. Bakalım doğru tahmin edebilecek misiniz?

        private void button1_Click(object sender, EventArgs e)
        {
            mydelegate d = new mydelegate(topla);
            d += carp;
            d -= topla;
            d += topla;
            MessageBox.Show(d(3,4).ToString());
            MessageBox.Show(a.ToString());
        }

Sizce bu kodun çıktısı nedir?

TFS Local Path değiştirme (Change TFS Local Path)

File ->Source Control -> Advanced -> Workspaces…

Worksapace üzerindeyken “Edit” butonuna tıklayın. Buradan Local Folder’ı değiştirebilirsiniz. Değiştirme işlemini tamamladığınızda. “Workspace’i değiştirdiniz. Güncel dosyaların kopyalanmasını istermisiniz anlamına gelen bir soru ile karşılaşırsınız.” Evet e basarsanız. Projelerinizin son halleri yeni belirlediğiniz local folder a kopyalanacaktır.

İyi çalışmalar.

CLOUD COMPUTING Aldatmacası

Son zamanlarda bir “Cloud Computing” hikayesi anlatılır oldu. Buna göre insanlar artık masaüstü uygulamaları kullanmak ve verilerini geleneksel bilgisayarlarında saklamak yerine, internet üzerindeki ortamlarda çalışacaklar ve dökümanlarını yine bu internet üzerindeki ortamlarda saklayacaklarmış. Büyük ölçekli firmaların artık kendi veritabanı serverlarını, file serverlarını almayıp, bunlar yerine internet üzerinde bir yer kiralayarak yada satın alarak uygulamalarını buralardan çalıştıracakları, paylaşılması gereken dökümanlarını buradan paylaşacakları, verilerini burada saklayacakları gibi laflar dolaşıyor ortalıkta. Şu anda bu söylenen şeyler bana pek gerçekçi gelmiyor doğrusu. Bu konu hakkında bir kaç makale okudum. Okuduğum makalelerde bu çalışma sisteminin faydası olarak ; Düşük Maliyetler, Yüksek depolama, Veri güvenliği alanları gibi şeylerden bahsediliyor. Haydi işiniz yoksa bunlar hakkında biraz düşünelim.

Birincisi ; Düşük Maliyetler. Genelde şöyle bir açıklaması var bu sistemi savunan arkadaşların; Bir iş kurarken yapmanız gereken donanım maliyetinden kurtulmuş olacaksınız diyorlar. Bu bence safsatadan başka birşey değil. İnternetteki o boş yeri de size bedava vermiyecekler sonuçta. Aylık ya da yıllık bir bedel ödeyeceksiniz mutlaka. Server alamayacağınız için (ama bu hizemete erişebilmek için bilgisayarınız olacak değil mi?), olmayan server’ınızın  bakımını ve ayarlamalarını yapmak için de personele ihtiyaç duymayacakmışsınız. Arkadaşlar yapmayın. Sizin bakım yapmak için adama ihtiyacınız olmayabilir ama o internet üzerindeki alanın hala bakıma ihtiyacı var ve bu hizmeti sağlayan arkadaşlar bu bakımı yapacaklar da. Tabi bunu hayrına yapmayacaklar. Bunun da bedelini faturanızda göreceksiniz. Bir de personelinizin bu hizmeti kullanabilmesi, internet üzerindeki o alana erişebilmesi için hala bilgisayara ihtiyacı var unutmayın. Onların bakımını kim yapacak peki? Geleneksel yöntemlerde şirket bünyesinde çalışan IT ekibi bu işleri de üstlenir. Demekki neymiş? Server haricindeki cihazlar için de birilerine ihtiyaç varmış. O halde demekki IT maliyetiniz olmak zorunda. Siz ne yaptınız IT maliyetine, size cloud hizmeti veren firmanın IT masrafını da eklediniz. Çünkü yukarıda dediğim gibi onların da bir bakım masrafı olacak ve bunu size yansıtmak zorundalar.

İkincisi ; Yüksek depolama kapasiteleri. Peta Byte yani 1 Milyon GB gibi depolama alanlarından bahsediliyor. Bu belki iyi bir özellik olabilir. Ama gene de büyüklüğün faturaya yansıyacağını düşünüyorum ben. Üstelik kullanılmayan işlevsiz büyüklüğün bile 🙂

Üçüncüsü; Veri güvenliği! Yaw veri nasıl olur da internette hiç bilmediğim bir bilgisayar üstünde hiç tanımadığım kişilerin ellerinde, benim dizimin dibinde duran istediğim zaman müdehale edebildiğim, istediğim antivirüs, firewall uygulamaları ile koruyup, istediğim gibi RAID yaptığım ve ne yaptığımı bildiğim ve yedeklediğim bir yerden daha güvende olur. En basitinden o hizmeti size sağlayan adamlara bile güvenebileceğinizi zannetmiyorum. Bence hiçbir şirket çok gizli ve(ya) değerli verilerini böyle bir ortamda tutmak istemez.

Benim bu CLOUD COMPUTING ten anadığım bunlar arkadaşlar. Eğer bu konu hakkında yanlış bir bilgim varsa yada yanlış kaygılarımın olduğunu düşünüyorsanız beni aydınlatın lütfen. Teşekkür ederim.