27 Ocak 2011 Perşembe

interfaceler i nasıl kullanırız..

bir class yazalım  3 tane sık kullanılan interface'i inherit etsin.. IComparable,ICloneable,IDisposable.
  Bu interfacelerin zorunlu kıldığı birer methodu implement etmek zorunda kalıyoruz bu durumda....  CompareTo , Clone  ve Dispose


class Personel:IComparable,ICloneable,IDisposable
    {

        public string Ad { get; set; }
        public string Soyad { get; set; }
        public int Yas { get; set; }


        public int CompareTo(object obj)
        {

            Personel p = (Personel)obj;

            return this.Ad.CompareTo(p.Ad);

        }

        public object Clone()
        {
            return this.MemberwiseClone();
        }

        public void Dispose()
        {
            GC.SuppressFinalize(this);
        }
 }




sonra ICompare'in zorunlu kıldığı CompareTo  sayesinde sınıfımızdan türettiğimiz objemizi  Sort edebiliyoruz.
 


 IClonable'ın zorunlu kıldığı  Clone methodu sayesinde objemizin birebir clonunu alabiliyoruz..

 IDisposable'ın zorunlu kıldığı Dispose sayesinde objemiz sistem tarafından, gerektiğinde  dispose edilebiliyor.

 sınıfımızı ve ilgili methodları  kullanan örnek kod aşağıdadır.

List<Personel> personeller = new List<Personel>();

            personeller.Add(new Personel { Ad = "Yasin", Soyad = "PEKER", Yas = 19 });
           
            personeller.Add(new Personel{Ad="Fatih", Soyad="ÜNAL",  Yas=33});

            personeller.Add(new Personel { Ad = "Mehmet", Soyad = "KARA", Yas = 22 });

           
            //IComparable
            personeller.Sort();


            Personel p1 = new Personel();
            p1.Ad = "Ali";
            Personel p2 = p1;
            p2.Ad = "Ahmet";

            MessageBox.Show("p1: " + p1.Ad + ",p2: " + p2.Ad );
           

            // sorun : 2side p2 oldu..!
            // IClonable..

            Personel p3 = new Personel();
            p3.Ad = "Ali";
            Personel p4 = p3.Clone() as Personel;
            p4.Ad = "Ahmet";
            MessageBox.Show("p3: " + p3.Ad + ",p4: " + p4.Ad);

            //Personel class'ı IDisposable olmazsa using kızar... using kapanınca dispose edebilmesi gerek.
            using (Personel p = new Personel())
            {

                p.Ad = "Ahmet";
           
            }

Hiç yorum yok: