26 Eylül 2011 Pazartesi

C# Delegate Kullanimi


5 temel tipten biri olan delegelerin kullanım amaçları, metot adresi saklamaktır. Bazen metotlarımızı, ihtiyacımız olduğu anda çalıştırmak isteyebiliriz. Olay(event) tabanlı programlama ve asenkron programlama yaparken, anonim metot yazarken delegelerden faydalanırız. Bir diğer kullanım amacı da, bir metoda parametre olarak başka bir metot verebilmektir. Bu yazımızda temel olarak delegenin ne olduğununu, nasıl tanımlandığını, nasıl kullanıldığını ve nasıl bir mantıkla çalıştığını inceleyeceğiz.
Delegeler referans türlü bir tiptir. Dolayısı ile nesneleri heap’de durur. Girişte bahsettiğimiz gibi, görevleri metot adresi tutmaktır. Burada dikkat edilmesi gereken nokta; delegenin imzası, tuttuğu metodun imzası ile aynı olmalıdır. İmzadan kastımız, geriye dönüş tipi ve aldığı parametrelerdir. Bir delege, birden fazla metot adresi tutabilir. Bu durumda FIFO (ilk giren ilk çıkar) prensibi geçerlidir. Yani metotlar, delegeye bağlanma sırasına göre çalışırlar. Sonuç almak istediğimiz zaman, en son eklenen metodun yaptığı işi görürüz.
Şimdi basit bir örnek ile anlatmak istediklerimizi incelemeye çalışalım.
namespace DelegeKavrami
{
    delegate void Temsilci(); //Tanımladığımız bu delege, geriye dönüş tipi void olan ve parametre almayan metotların adreslerini saklayabilir.
   
    class Program
    {
        static void Main(string[] args)
        {
            Temsilci t = new Temsilci(Test);
            t.Invoke();
        }

        static void Test()
        {
            Console.WriteLine("Metot çalıştı");
        }
    }
}
İlk olarak, adresini tutacağımız metodun imzasına uygun bir delege tanımladık. Daha sonra Main metodu içerisinde, delege nesnemizi oluşturduk ve constructor metoduna parametre olarak metodumuzun adını verdik. t değişkeni üzerinden invoke metodunu çağırdımızıda da metodumuzu çalıştırmış olduk. (metodumuz parametre alsaydı, invoke metoduna parametre değerlerini vermemiz gerekecekti.)
Untitled

Şimdi de bir delegeye birden fazla metot bağladığımızda nasıl bir sonuç alacağımızı incelemeye çalışalım.
namespace DelegeKavrami
{
    delegate int Matematik(int x);
   
    class Program
    {
        static void Main(string[] args)
        {
            Matematik canta = new Matematik(KareAl);
            canta += new Matematik(KupAl);
            Console.WriteLine(canta.Invoke(5));
        }

        static int KareAl(int sayi)
        {
            return sayi * sayi;
        }

        static int KupAl(int sayi)
        {
            return sayi * sayi * sayi;
        }
    }
}
Yukarıdaki kod parçasını çalıştırdığımızda alacağımız sonuç aşağıdaki gibidir.
Untitled2
Delegemize iki metot bağlamamıza rağmen, invoke metodunu çağırdığımızda en son eklenen metodun çalıştığını gördük.
Son olarak yazım kolaylıklarından bahsedelim.
1) Bir delegeye += ile metot ekleyebildiğimiz gibi, –= ile de metot çıkartabilmemiz mümkündür.
Matematik canta = new Matematik(KareAl);
canta += new Matematik(KupAl);
canta -= new Matematik(KupAl);
Bu aşamada delegemizi invoke ettiğimizde KareAl metodu çalışacaktır.
2) Delege nesnesi oluştururken, new …(..) yazmayabiliriz.
Matematik canta = KareAl;
canta += KupAl;
Console.WriteLine(canta.Invoke(5));
3) canta değişkeni üzerinden invoke etmek yerine, bu değişkene direkt olarak parametreleri verebiliriz.
Matematik canta = new Matematik(KareAl);
int sonuc = canta(5);

Kaynak : http://onursalkaya.blogspot.com 
Share:

C# Interface Kullanimi


.Net’in 5 temel tipinden (class,interface,delegate,struct,enum) biridir. Çoklu kalıtım ihtiyacını gidermek amacı ile kullanılırlar. Interface’leri, yetenek kazandıran şablonlar olarak tanımlayabiliriz. Bir başka deyişle; tüm üyeleri abstract olan sınıflara benzetilebilirler. Bir sınıf birden fazla sınıftan kalıtılamaz, ancak bir sınıfa birden fazla interface’I implement etmek mümkündür. Genelde kullanım amaçları, uygulandığı tiplere bazıkurallar koymak ya da bazı yetenekler kazandırmaktır.
NOT: Interface’ler de, kalıtım yapar gibi  ‘ : ’ işareti ile uygulanırlar. ‘ : ‘ işaretinden sonra bir sınıf gelirse, buna “kalıtmak” ya da “extend etmek” deriz. Eğer bir interface gelirse, buna “uygulamak” veya “implement etmek” deriz.
Temel özellikleri;
  1. Tüm üyeleri abstract olmak zorundadır. (Üyeleri tanımlarken bizim belirtmemize gerek yoktur. Zaten default olarak abstact’tırlar.)
  2. Uygulandığı sınıf, o interface’in tüm üyelerini ezmek zorundadır. (override anahtar sözcüğünü kullanamayız)
  3. Üyeleri tanımlarken access modifier (erişim belirleyici) yazamayız. Üyeler default olarak public’tir.
Şİmdi basit bi örnek üzerinde inceleyelim.
Aslan,Kaplan,At ve Inek adında 4 tane sınıf tasarlayalım. İçerisine herhangi bir üye tanımlaması yapmayacağız.
    class Aslan
    {
    }
   
    class Kaplan
    {
    }
   
    class At
    {
    }
   
    class Inek
    {
    }
Şimdi de Etçil ve Otçul adında iki sınıf tasarlayalım. Bu sınıflarımızı abstract olarak tanımlayacağız. Çünkü amaçları, yukarıda yazdığımız sınıflara base class olmaktır.
    abstract class Etcil
    {
        public abstract void BeslenmeSekli_1();
    }

    abstract class Otcul
    {
        public abstract void BeslenmeSekli_2();
    }
En başta tanımladığımız 4 sınıfı, türlerine göre Etcil ve Otcul sınıflarından kalıtalım;
    class Aslan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan:Etcil
    {
        public override void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek:Otcul
    {
        public override void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }
Simdi de Ayi adında bir sınıf tasarlayalım. Bildiğiniz gibi ayılar hem otçul hem de etçil hayvanlardır. Yani hem etçil hem de otçul sınıfından kalıtım yapmamız gerekecek. Ancak .Net mimarisi çoklu kalıtıma izin vermez. İşte bu noktada interface'ler imdadımıza yetişecektir. Etcil ve Otcul sınıflarını interface olarak tasarlayıp, sınıflarımıza uygulayalım.
    public interface IEtcil
    {
        void BeslenmeSekli_1();
    }

    public interface IOtcul
    {
        void BeslenmeSekli_2();
    }
.Net’de interface adlandırmaları büyük ‘I’ harfi ile başlar. Bu bir zorunluluk değildir ancak standartlara uymak açısından, bu tip adlandırmalar tercih etmek daha doğru olur.
    class Aslan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class Kaplan : IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }
    }

    class At : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Inek : IOtcul
    {
        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }

    class Ayi : IOtcul, IEtcil
    {
        public void BeslenmeSekli_1()
        {
            Console.WriteLine("Ben etçilim...");
        }

        public void BeslenmeSekli_2()
        {
            Console.WriteLine("Ben otçulum...");
        }
    }
Görüldüğü gibi, interface kullanarak sorunumuzu çözmüş olduk. Bu sayede Ayi sınıfımıza hem etçil hem de otçul olma özelliğini kazandırmış olduk

Kaynak : onursalkaya.blogspot.com
Share:

Div Ortalama

800 piksellik bir Div'iniz var ve istiyorsunuz ki ekranınızın genişliği ne olursa olsun o daima ortada kalsın. Table'daki gibi Align="Center" diyerek yapamayız:) 

Öyleyse Divi Nasıl Ortalanır;

<div style="width:800px; margin-left:auto; margin-right:auto;">
        İçerik buraya gelecek.
< /div>
Share:

16 Eylül 2011 Cuma

Flash boyutu sayfada değişmesin

Html sayfa içerisine koyduğumuz bir flashın boyutunun sayfayı kaplamasını ama sayfa boyutu değiştirilince küçülme ve büyüm yapmamasını istiyorsak aşağıdaki kodları kullanmamız kafi olacaktır.

Burada dikkat edilmesi gereken kısım;

<param name="SCALE" value="NoScale">

KODLAR;

<div id="menu">
<object data="images/menu.swf" type="application/x-shockwave-flash" width="100%" height="150px">
<param name="movie" value ="images/menu.swf"/>
<param name="SCALE" value="NoScale">
</object>
</div>



Hakan ÖNCEL
Share:

Oracle Client X64 Bit Windows 7 Üzerine Kurulumu

Bildiğiniz gibi Oracle 10 g x64 Bit Client Windows 7 üzerine kurulamıyor, veya kurulsa bile ODBC bağlantılarında servis isimleri çıkmıyordu.

Yapmış olduğum araştırmalar sonucunda ulaştığım çözümü sizlerle paylaşıyorum;

Öncelikle elinizdeki kurulum 32 Bit Client kurulum dosyanızı 64 Bit üzerine kuramıyorsanız yada işletim sisteminiz Microsoft Windows 7 olduğundan dolayı kurulum işlemini gerçekleştiremiyorsanız aşağıdaki işlemleri yapmamız gerekmekte.

ADIM 1)
Window7 de Oracle 11g kurulumu tamamlandıktan sonra aşağıdaki hatayı alıyorsanız.!

Checking operating system requirements ...
Expected result: One of 5.0,5.1,5.2,6.0
Actual Result: 6.1
Check complete. The overall result of this check is: Failed <<<<
Problem: Oracle Database 11g is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
================================================== ======

Şu işlemleri yaparsanız hatayı gidermiş olursunuz.

C:\Users\KULLANICIADINIZ\AppData\Local\Temp\OraIns tall2009-10-19_01-53-02PM\client
dizini altındaki refhost.xml dosyasını açın ve
<!--Microsoft Windows Vista-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.0"/>
</OPERATING_SYSTEM> in altına;

<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
ekleyin. Gereksinimleri Retry dediğinizde hatanın Success e dönüştüğünü göreceksiniz.


ADIM 2)

Client kurulum dosyasını (ZIP) açtığınız klasörün altındaki "install" dizinine gidin. Orada oraparam.ini dosyasını açıp içindeki "Windows=5.0,5.1,5.2,6.0" satırını "Windows=5.0,5.1,5.2,6.0,6.1" yapın. Bunu yaptıktan sonra kurulum sırasında prerequest check fail etmeyecektir.

Şimdi kurulumu sorunsuz olarak yapabiliriz, kurulum işlemi tamamlandıktan sonra yapacağımız son bir işlem daha kaldı,

ADIM 3 )

%windir%\SysWOW64\odbcad32.exe Klasörü içerisindeki OBDAC32.EXE dosyasını kullanarak ODBC bağlantılarımızı yapabiliriz.
Share:

Blog Arşivi