Onur GÜLTEKİN


Bir Kaç Ufak Not Hafızaları Canlandırır

XML Serializable Kullanımı

Merhaba,
Arrayde bulunan bir datayi istenen bir klasörde XML olarak yaratabiliriz ya da Varolan bir XML den datayi çekebiliriz.
Örnek olarak manken classi yaratıp.Bu classi nasıl kullanacağımızı aşağıdaki gibi anlatmaya çalışacağım.

Örnek;
  [XmlRoot("Mankenler")]
     //serilestirilebilmesini saglamak için [Serializable] ekledik
       [Serializable]
      public class Manken : IDeserializationCallback
      {
            // parametresiz ctor olmali
            //public Manken(string _name)
            //{
            //      this.name = _name;
            //}

            [XmlAttribute]
            public int id { get; set; }
            public string name { get; set; }

            [NonSerialized]
            [XmlElement(ElementName = "Ölçüler")]
            public string measure;
 
  //telefon numarasini vermek istemiyorsak

            [XmlIgnore]
            public string phone { get; set; }

            public string address { get; set; }
            public double dailyFee { get; set; }

            [XmlElement("sponsors")]
            public Sponsorlar[] sponsor { get; set; }

            public override string ToString()
            {
                  return name + " " + this.measure;
            }

            #region IDeserializationCallback Members

            public void OnDeserialization(object sender)
            {
                  measure = "90-60-90";
            }

            #endregion
      }

      [Serializable]
      public class Sponsorlar
      {
            public int id { get; set; }
            public string name { get; set; }
      }
}

 

Aşagidaki kodla manken objesi yarattip, nasıl kullanacağımızı anlatmaya çalıştım.
   public Form1()
            {
                  InitializeComponent();
            }
           

            private void Form1_Load(object sender, EventArgs e)
            {
                  List<Manken> mankenler = new List<Manken>();
                  mankenler.Add(new Manken()
                  {
                        id = 1,
                        name = "Bar Rafaeli",
                        measure = "90-60-90",
                        address = "Israil",
                        phone = "+271237897189",
                        dailyFee = 10001,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 1, name = "taygun A.S." } }
                  });
                  mankenler.Add(new Manken()
                  {
                        id = 5,
                        name = "Adriana Lima",
                        measure = "89-61-91",
                        address = "Brasil",
                        phone = "+877812637868",
                        dailyFee = 10001,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 6, name = "Onur A.S." } }
                  });

                  Manken m = new Manken()
                  {
                        id = 2,
                        name = "Ugur Çakmakçi",
                        measure = "100-100-100",
                        address = "Türkiye",
                        phone = "+901234567",
                        dailyFee = 5, // + akbil + yemek,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 12, name = "Hacioglu Lahmacun" } }
                  };
                  mankenler.Add(m);


                  //XmlSerializer xs = new XmlSerializer(typeof(Manken));
                  //StreamWriter sw = new StreamWriter("C:\\Temp\\mankenler.xml");
                  //xs.Serialize(sw, m);
                  //sw.Close();


                  //bu kisimda XML serialization islemi yapilmaktadir.  
                  XmlSerializer xs = new XmlSerializer(typeof(List<Manken>));
                  StreamWriter sw = new StreamWriter("C:\\Temp\\mankenler.xml");
                  xs.Serialize(sw, mankenler);

 //Deserialization islemi için ise asagidaki sekilde yapiyoruz
 public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        List<Manken> mankenler = new List<Manken>();
        private void Form2_Load(object sender, EventArgs e)
        {
            XmlSerializer xs = new XmlSerializer(typeof(List<Manken>));

           //mevcut XML dosyadan okunur ve mankenler'e eklenir.
            StreamReader sr = new StreamReader("C:\\TEMP\\mankenler.xml");

            mankenler = (List<Manken>)xs.Deserialize(sr);
            foreach (Manken m in mankenler)
            {
                listBox1.Items.Add(m);
            }

            sr.Close();
        }
    }
            sw.Close();
}

//Binary formatter Kullanımı ise aşağıdaki gibidir.
namespace WinSerialization
{
      public partial class Form3 : Form
      {
            public Form3()
            {
                  InitializeComponent();
            }

            private void Form3_Load(object sender, EventArgs e)
            {
                  List<Manken> mankenler = new List<Manken>();
                  mankenler.Add(new Manken()
                  {
                        id = 1,
                        name = "Bar Rafaeli",
                        measure = "90-60-90",
                        address = "Israil",
                        phone = "+271237897189",
                        dailyFee = 10001,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 1, name = "taygun A.S." } }
                  });
                  mankenler.Add(new Manken()
                  {
                        id = 5,
                        name = "Adriana Lima",
                        measure = "89-61-91",
                        address = "Brasil",
                        phone = "+877812637868",
                        dailyFee = 10001,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 6, name = "Onur A.S." } }
                  });

                  Manken m = new Manken()
                  {
                        id = 2,
                        name = "Ugur Çakmakçi",
                        measure = "100-100-100",
                        address = "Türkiye",
                        phone = "+901234567",
                        dailyFee = 5, // + akbil + yemek,
                        sponsor = new Sponsorlar[] { new Sponsorlar() { id = 12, name = "Hacioglu Lahmacun" } }
                  };
                  mankenler.Add(m);

                  BinaryFormatter bf = new BinaryFormatter();

                  FileStream sw = new FileStream("C:\\Temp\\mankenler.bin", FileMode.Create);

                  bf.Serialize(sw, mankenler);

                  sw.Close();
            }
      }
}


//Binary formatter deserialize Kullanımı ise aşağıdaki gibi olacaktır.

namespace WinSerialization
{
      public partial class Form4 : Form
      {
            public Form4()
            {
                  InitializeComponent();
            }

            private void Form4_Load(object sender, EventArgs e)
            {
                  BinaryFormatter bf = new BinaryFormatter();

                  FileStream sw = new FileStream("C:\\Temp\\mankenler.bin", FileMode.Open);

                  List<Manken> mankenler = (List<Manken>)bf.Deserialize(sw);

                  sw.Close();

                  foreach (Manken item in mankenler)
                  {
                        listBox1.Items.Add(item);
                  }
            }
      }
}


Web Service Kullanımı

Merhaba,
Web projemize webservice ekleyerek işe başlıyalım. Sonrasinda bu  web servis içerisinde çalistiracagimiz metodlari belirleriz. Bu şekilde uzaktaki bir bilgisayar bu prosedürleri çalistirabilir. Bunu aşağıdaki kodda basitçe anlatmaya çalışacağım.

Örnek,
namespace WebService1
{
      /// <summary>
      /// Summary description for Service1
      /// </summary>
      [WebService(Namespace = "http://tempuri.org/")]
      [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
      [System.ComponentModel.ToolboxItem(false)]
      // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
      // [System.Web.Script.Services.ScriptService]
      public class Service1 : System.Web.Services.WebService
      {
            public authHeader ah;
            [SoapHeader("ah")]
        
           //Bu sekilde webservisin kullanacagi metodu belirlemis oluruz.  
            [WebMethod]
            public string HelloWorld()
            {
                  if (ah.name == "admin" && ah.pass == "123")
                  {
                        return "giris basarili";
                  }
                  return "giris basarisiz";
            }


           //EnableSession=true ile webservice içerisindeki methoda session islemleri yaptirabiliyoruz.
           [WebMethod(EnableSession=true)]
            public string Login(string name,string pass)
            {
                  string txt = "";
                  if (name == "admin" && pass == "123")
                  {
                        txt = Guid.NewGuid().ToString();
                        Session["login"] = txt;
                  }
                  return txt;
            }

            [WebMethod(EnableSession=true)]
            public bool SiparisVer(Manken m, string auth)
            {
                  if (Session["login"] == null || Session["login"].ToString() != auth )
                  {
                        return false;
                  }

                  StreamWriter sw = new StreamWriter("C:\\Temp\\siparis.txt");
                  sw.WriteLine(m.id + " " + m.name);
                  sw.Close();
                  return true;
            }

      }

      public class authHeader : SoapHeader
      {
            public string name { get; set; }
            public string pass { get; set; }
      }

}

Uzak bilgisayardan ise, aşağıdaki kodla bu webservice çagirilabilir.
namespace WindowsFormsApplication1
{
      public partial class Form1 : Form
      {
            public Form1()
            {
                  InitializeComponent();
            }

                  authHeader ah = new authHeader() {
                  name = "admin",
                  pass = "123"
            };

          //Webservice client kurulur.Sonrasinda instance'i alinan SoapClient ile metodlar çalistirilir.
            private void button1_Click(object sender, EventArgs e)
            {
                  Service1SoapClient service = new Service1SoapClient();
                  string auth = service.Login("admin", "123");
                  string r = service.HelloWorld(ah);

                  Manken m = new Manken()
                  {
                        id = 2,
                        name = "Burcu Esmersoy"
                  };

                 bool result = service.SiparisVer(m, auth);
            }

      }
}


Threading Kullanımı

Merhaba, Genelde bir programda birden fazla işlem yapmak istedğimizde, Threadler bizim yardımıza koşarlar. Büyük projelerdede de sıklıkla kulllanılırlar. Kullanılma sebebi ise, bir prograda, bir yandan rapor isterken, diğer yandan da sorgulama yapmak için kullanılabilmeleridir. Aşağıda küçük bir örnekle anlatmaya çalışacağım. Unutmanız gereken tek özellik ise Form içerisinde  "CheckForIllegalCrossThreadCalls = false;" ThreadCalls özelliğini False yapmanız. Eğer bunu yapmazsanız threadler çalışmaz.

Örnek,
namespace WinThreading
{
    //
    public delegate void temsilci();


    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
           //Bu sekilde çapraz threadlerin call edilmesini engelleriz
           CheckForIllegalCrossThreadCalls = false;
        }

  
 //Thread tipinde degiskenler tanimlariz

        Thread th1, th2, th3,th4;
        private void button1_Click(object sender, EventArgs e)
        {


    //Thread seklinde yeni bir instance alinir ve ThreadStart ile çalistirilacak metod belirlenir.  

            th1=new Thread(new ThreadStart(method1));
            th2 = new Thread(new ThreadStart(method2));
            th3 = new Thread(new ThreadStart(method3));

    //Method4 parametre alan bir metod oldugu için ParameterizedThread ile çalistiririz

            th4 = new Thread(new ParameterizedThreadStart(method4));

 

 

    //Priority ile threadlerin çalisma önceligi belirlenir

            th1.Priority = ThreadPriority.Highest;
            th2.Priority = ThreadPriority.Lowest;
          
    //threadleri çalistirmaya baslariz

            th1.Start();
            th2.Start();
            th3.Start();
            th4.Start(10);

 

           // temsilci t = new temsilci(method1);
           //// t();

           // //delegenin tuttugu methodu çagirmak için
           // //t.Invoke();
           // temsilci t2 = new temsilci(method2);
           // //t2();


           // IAsyncResult result;

           // AsyncCallback callback = new AsyncCallback(completed);

           // result=t.BeginInvoke(callback,null);
           // while (!(result.IsCompleted))
           // {
           //     listBox2.Items.Add(DateTime.Now.ToLongTimeString());
           // }


           // t.EndInvoke(result);


            MessageBox.Show("Btn click");

 

        }

        int i = 0;
        int j = 1;


        void method1()
        {


            listBox3.Items.Add("Method1 "+Thread.CurrentThread.ManagedThreadId);
            while (true)
            {
                listBox1.Items.Add(i++);
                Thread.Sleep(1000);

            }
        
       
        }
        void method2()
        {
            listBox3.Items.Add("Method2 " + Thread.CurrentThread.ManagedThreadId);
            while (true)
            {

                j *= 10;
                listBox2.Items.Add(j);
                Thread.Sleep(1000);

            }

         }

        void  completed(IAsyncResult result)
        {
            MessageBox.Show("Completed");
           
       
        }

        void method3()
        {
            listBox3.Items.Add("Method3 " + Thread.CurrentThread.ManagedThreadId);

            while (true)
            {

                label1.Text = DateTime.Now.ToLongTimeString();
            }


        }


        void  method4(object obj)
        {
            listBox3.Items.Add("Method4 " + Thread.CurrentThread.ManagedThreadId);
            int k = (int)obj;
 
            while (true)
            {
                k += 2;
                listBox4.Items.Add(k);
                Thread.Sleep(1000);
            }


        }

        private void Form1_Load(object sender, EventArgs e)
        {
            listBox3.Items.Add("Form " + Thread.CurrentThread.ManagedThreadId);
           
        }

        private void button2_Click(object sender, EventArgs e)
        {
            th1.Abort();
            th2.Abort();
            th3.Abort();
            th4.Abort();
           
        }       
    }
}


Generic Kullanımı

Merhaba Genericler Tip güvenligi sağlarlar ve boxing unboxing yapilmadigi için performans artisina neden olur. Bu nedenle genericler kullanilir.

 private void Form1_Load(object sender, EventArgs e)
            {
               //ArrayList object aldigi için her türlü veri girisi yapilabilir.
                  ArrayList al = new ArrayList();
                  al.Add(234);
                  al.Add("123");
                  al.Add(new TextBox());

                  foreach (object item in al)
                  {
                   //Ancak burada int cast ettigimizde "123" ve new Textbox tan dolayi hata aliriz
                     int a = (int)item;
                  }

  //Burada List collectionina sadece int degerler alabilecegini belirttigimizden herhangi bir
  //problem yasamayiz.Zaten int harici deger atamasi yapamayiz.

                  List<int> list = new List<int>();
                  list.Add(345);
                  list.Add(24);
                  list.Add(67);

                  foreach (int item in list)
                  {
                         list.Add(item);
                  }
            }

Collectionlarin generic tipleri aşağıdaki gibidir.
private void Form4_Load(object sender, EventArgs e)
            {
                  Queue<int> q = new Queue<int>();
                  q.Enqueue(1);
                  q.Enqueue(4);

                  Stack<string> s = new Stack<string>();
                  s.Push("A");
                  s.Push("B");

                  Dictionary<int, string> d = new Dictionary<int, string>();
                  d.Add(1, "Enes");
                  d.Add(2, "Gökçe");
                  d.Add(3, "Sami");

                  SortedList<string, string> sl = new SortedList<string, string>();
                  sl.Add("A", "Hede");

                  SortedDictionary<int, int> sd = new SortedDictionary<int, int>();

            }

Örnek olarak Para diye bir class yapalım ve bunu kullanalım.
 public class Para<Tip>
      {
            public Tip TL;
            public Tip Kurus { get; set; }

            public Para()
            {

            }
            public Para(Tip _tl,Tip _kurus)
            {
                  this.TL = _tl;
                  this.Kurus = _kurus;
            }

            public Tip Yazdir(Tip t)
            {
                  return t;
            }


            public override string ToString()
            {
                  return TL + " TL " + Kurus + " Kurus";
            }
      }

Classımızı aşağıdaki gibi kullandığımızda, her tipe uygun islem yapilmis olur.
private void Form2_Load(object sender, EventArgs e)
            {
                  Para<int> p = new Para<int>();
                  p.TL = 40;
                  p.Kurus = 13;

                  Para<string> p2 = new Para<string>() {
                        TL = "Kirk",
                        Kurus = "On Üç"
                  };

                  Para<double> p3 = new Para<double>(3, 12);

                  listBox1.Items.Add(p);
                  listBox1.Items.Add(p2);
                  listBox1.Items.Add(p3);
            }


GDI Kullanımı

Merhaba GDI (Graphics Device Interface) .NET ten çizim yapabilmek için kullanilir ve bir classtır. Kullanımı ise aşağıdaki örnekte görüldüğü gibidir.
Örnek;
public partial class Form1 : Form
      {
            public Form1()
            {
                  InitializeComponent();
            }

            bool IsCalled = false;

            private void button1_Click(object sender, EventArgs e)
            {
                  draw(this.CreateGraphics());
            }

            void draw(Graphics gTemp)
            {
                  IsCalled = true;
                  gTemp.DrawEllipse(new Pen(Brushes.Red), 100, 100, 30, 30);

                  gTemp.DrawPie(new Pen(Brushes.Red), 100, 200, 150, 180, 0, 60);
                  Point[] ps = {
                               new Point(1,1),
                               new Point(10,22),
                               new Point(15,30),
                               new Point(50,60)
                               };

                  gTemp.FillClosedCurve(Brushes.Red, ps);

                  gTemp.FillPie(Brushes.Lavender, 70, 70, 100, 100, -60, 150);
            }

            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                  Graphics g = this.CreateGraphics();
                  if (IsCalled)
                  {
                        draw(g);
                  }
            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }
      }


Collections Kullanımı 3

Merhaba Bugün yığın yapısını inceleyeceğiz. Muhasebedeki gibi FIFO (İlk giren, ilk çıkar) ve LIFO (Son giren ilk çıkar) yöndeminin kullanımını anlatmaya çalışacağım.

Stack  LIFO yapisindadir. Push ile data insert edilir Pop ile data çikarilir.

Örnek;
class ClassStack
      {
            static void Main()
            {
                  Stack kitaplar = new Stack();

                  kitaplar.Push("Herkes için C#");
                  kitaplar.Push("Sefiller");
                  kitaplar.Push("Kasagi");
                  kitaplar.Push("Tanrilarin Arabalari");

                  // yiginin en üstünden elemani siler ve döndürür.
                  // kitaplar.Pop()
                  //foreach (object item in kitaplar)
                  //{
                        //Console.WriteLine(kitaplar.Pop());
                  //}

                        //for (int i = 0; i < kitaplar.Count; i++)
                        //{
                              //Console.WriteLine(kitaplar.Pop());
                        //}

                  Console.WriteLine(kitaplar.Peek());

                  while (kitaplar.Count > 0)
                  {
                        Console.WriteLine(kitaplar.Pop());
                  }
                  Console.Read();
            }
      }


Queue FIFO yapisindadir. Enqueue ile data insert edilir dequeue ile data çikarilir.

Örnek;
static void Main1()
            {
                  Queue kuyruk = new Queue();

                  kuyruk.Enqueue("Emre");
                  kuyruk.Enqueue("Okan");
                  kuyruk.Enqueue("Ugur");
                  kuyruk.Enqueue("Taygun");

                  Console.WriteLine(kuyruk.Peek());
                  while (kuyruk.Count > 0)
                  {
                        Console.WriteLine(kuyruk.Dequeue());
                  }

                  Console.Read();
            }