C# Class Nedir? Nasıl Kullanılır? adlı yazım ile karşınızdayım dostlar, Giriş seviyesindeki dostlarım için giriş konularından ileri konulara doğru yazılarımı paylaşacağım. Bu dersimizde C# class nedir? Mantığı nedir? Neden kullanırız? Nasıl kullanırız? gibi sorulara yanıt verdikten sonra basit bir iki örnekle yazımı sonlandıracağım. Dilerseniz sorularımıza geçelim.
Yazılıma Başlamak Mı İstiyorsunuz? Görmeniz Lazım! başlıklı yazımı okuduktan sonra bu yazıya gelirseniz bu konunun önemini daha iyi anlayacaksınız.
Class Nedir?
Class dediğimiz yapı kısaca, sürekli kullandığımız kodları yada kod bloklarını ayrı bir cs dosyasına alarak, tüm proje genelinde istediğimiz formda ve istediğimiz kadar kullanabileceğimiz bir yapıdır.
Mantığı Nedir?
Class mantığı şöyledir. Bir kodu bir kere yaz her yerde kullan. Ancak dikkat edilmesi gereken noktalar vardır. Çok sık kullandığımız kodlarımız var evet ancak her kod bloğu o forma göre hazırlanmış ve bazı formlarda birazcık daha farklı… Direk o kodu alır kopyalarsak olmaz. Bu kodları en genel haline getirmemiz gerekmektedir. Örneğin kodlar bir formda 5 satır, başka formda 7 satır, diğer bir formda 3 satır diyelim. Kullanıldığı yere göre ek işlemler yapabiliyoruz yada gereksiz işlemleri kaldırabiliyoruz. Şimdi, öyle bir mantık yapacağız ki o kodlar her kullanım için uyumlu olacak. Class’ın son hali 100 satır bile olabilir sorun etmeyin. Lazım olduğu yerde onu kullanmamız bir en fazla iki satır tutacaktır.
Neden Kullanırız?
Bir sql database bağlantısı yaptığınız kodlarınızı gözlerinizin önüne getirin. Sqlconnectionlar, dataadapterler, datareaderler, disposelar, closelar, openlar vs. vs. değil mi? Ve bunlar hemen hemen her formda var ve 120 tane de sql işlem yaptığınız formunuz olduğunu düşünün. Bu kodları her formda en az 2 kere de bu kodları kullandığınızı da düşünün. Ne yaptı 240, hadi 250 olsun. Tam 250 kere bu kodları yazdınız. Sonra dediniz ki bu versiyon 1 olsun. Birde bunun versiyon 2’sini çıkarayım. Sonra gittiniz yeni bir database açtınız. Adının sonuna da V2 dediniz. Buraya kadar bir sorunumuz yok. Projeyi açtınız ki her yerde bağlantı hatası var. Bir baktınız tüm projede toplam 250 kere kullandığınız her sql kod bloğundaki sql connection string satırında eski database adı yazıyor. Off hadi gel de tek tek bu adları değiştir şimdi. Kaç saat sürecek bu işlem?.
Bazı akıllı arkadaşlarımız “La Bul ve Değiştir var.” diyecek. Her seferinde bul ve değiştir mi kullanacaksın dostum?. Kaldı ki bu en basit örnekti. Bul ve değiştir kullanamayacağın zamanlar da olacak.
Ama işte burada bir sql connection class ‘ın olsaydı eğer classı açıp database adını değiştirdiğinde tüm projede aktif olacaktı. 5 Saniye sürmez.
Nasıl Kullanırız?
Basit bir senaryo yazalım. Bu kısımda kendi tecrübelerimi de sizlerle paylaşacağım. Class mantığını öğrenmeden önce çektiğim çileleri göstereceğim. :D
Senaryomuz bir sql insert yada update işleminden sonra ilgili kişilere bildiri maili gitmesini istiyoruz.
İlk kullanım Şeklim
// SQL işlemlerini yaptık. // Maili gönderiyoruz. System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); System.Net.NetworkCredential cred = new System.Net.NetworkCredential("mail@mail.com", "Şifre"); mail.To.Add("ilgilikisinimaili@mail.com"); mail.Subject = "SQL e kayıt eklendi"; mail.From = new System.Net.Mail.MailAddress("mail@mail.com", "adınız"); mail.IsBodyHtml = true; mail.Body = ".... kaydı eklendi"; System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587); smtp.UseDefaultCredentials = false; smtp.EnableSsl = true; smtp.Credentials = cred; smtp.Send(mail);
İlk kullandığım yöntem buydu. Her mail göndermek istediğim yere bu kadar kodu tekrar tekrar yazıyordum. Bir değişiklik yapmam gerektiğinde bu kodu her nereye yazdıysam tek tek bulup değiştiriyordum. Ayı form içerisinde bile zaman zaman 4 5 kere kullanmam gerekebiliyordu. Hepsini bulup düzenlemek günlerce sürebiliyordu. Artık canımdan bezmiştim.
İkinci Kullanım Şeklim
// Kaydet butonu Click eventi { // SQL işlemlerini yaptık. MailGonder("ilgilikisinimaili@mail.com", "SQL e kayıt eklendi","SQL kayıt eklendi haberiniz olsun.", "sistem maili", "sistemmaili@mail.com","sistem mail şifresi"); } void MailGonder(string ToMail, string Subject , string Body , string Adınız, string FromMail, string Sifre ) { System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FromMail, Sifre ); mail.To.Add(ToMail); mail.Subject = Subject ; mail.From = new System.Net.Mail.MailAddress(FromMail, Adınız); mail.IsBodyHtml = true; mail.Body = Body ; System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587); smtp.UseDefaultCredentials = false; smtp.EnableSsl = true; smtp.Credentials = cred; smtp.Send(mail);
Bu örnekte gördüğünüz gibi mail gönderme kodları bir void içerisinde. Bunu void kullanmayı öğrendikten sonra hazırlamıştım. ama yine de sorunlu çünkü yine lazım olan her forma yazmak zorundaydım. Değişiklik yapmam gerektiğinde her formu tek tek geziyordum. 1. aşamadaki kadar uzun sürmese de çok uğraştırıyordu. Arada bir tanesini unutsanız…. Sıkıntı….
Üçüncü Kullanım Şeklim
using System; using System.Collections.Generic; using System.Linq; using System.Net.Mail; using System.Text; namespace ProjenizinAdi { class SendMail { public static bool SendMail(string ToMail, string Subject , string Body , string Adınız, string FromMail, string Sifre ) { try { System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage(); System.Net.NetworkCredential cred = new System.Net.NetworkCredential(FromMail, Sifre ); mail.To.Add(ToMail); mail.Subject = Subject ; mail.From = new System.Net.Mail.MailAddress(FromMail, Adınız); mail.IsBodyHtml = true; mail.Body = Body ; System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.mail.com", 587); smtp.UseDefaultCredentials = false; smtp.EnableSsl = true; smtp.Credentials = cred; smtp.Send(mail); } catch { return false; } return true; } } }
- aşamada da class kullanmasını öğrendikten sonra direk yeni class açarak mail gönderme işlemini hazırladım. Artık tüm kodlar tek yerde oldu. Proje genelinde nerede kullanmak istersem class çağırarak tek satır kod ile işlemleri halledebiliyorum. Değişiklik yapmam gerektiğinde sadece class’ı değiştirip bırakıyorum ve tüm projede değişmiş oluyor.
Kullanım Şekli
// Kaydet butonun click eventi içerisine.... { //SQL işlemlerini yaptık. SendMail.MailGonder("ilgilikisinimaili@mail.com", "SQL e kayıt eklendi","SQL kayıt eklendi haberiniz olsun.", "sistem maili", "sistemmaili@mail.com","sistem mail şifresi"); }
Şuan bu şekilde bir çok class mevcut projemde. GlobalSystem, SQLConnectionClass, SendMail, ConvertSystem, PrintSystem vs. vs. bir sürü class var ve gün geçtikçe çoğalıyorlar. Bunun en güzel yanı, kodları geliştirmek istediğinizde gözünüz korkmuyor. Kolayca istediğiniz değişikliği yapabiliyorsunuz. Saatlerce hata yada değiştirilecek kod kaldı mı diye projede gezinmiyorsunuz.
Hem kodlarımız kısalmış oluyor, hem daha anlaşılır oluyor, hem değişiklik yapmak kolay oluyor, hem MODÜLER bir sisteminiz oluyor, hem merkezi bir sistem kurmuş oluyorsunuz, hem yeni projeye başladığınızda class’larınızı hemen aktarabiliyorsunuz hemde arkanızdan sövdürmemiş oluyorsunuz
Sizde biliyorsunuz ki kafasına göre kod yazanların, kod hammalığı yaparak proje hazırlayanların arkasından genelde sövülür :). Ben çok sövdüm… Ve öyle bir duruma düşmek istemediğim için yazdığım kodlara özen göstermeye çalışıyorum..
Bu ders bu kadar dostlar yazılıma gönül vermiş arkadaşlar için umarım faydalı olur.
C Sharp Eğitim Seti ve ERP Programlama eğitimi sayfasına gitmek için tıklayınız.
Sağlıcakla ve takipte kalın.
Hocam en son kullanım yerinde “Sendmail.sendmail” olması gerekmiyor mu?
sendmail klası içerisinden sendmail metodunu çağırıyoruz? yanlış anlamısta olabilirim kusura bakmayın,şimdiden cevabınız için teşekkürler.
Doğru. Class içindeki metodun adı hatalı olmuş. Aslında class içindeki metodun adı MailGonder olması gerekiyor. Orada bir hata olmuş.