C# İle Dizinleyici, Başlıktan belki tam olarak ne olduğunuz çıkaramaya bilirsiniz fakat c#’da farkında olmadan dizinleyicileri sıklıkla kullanmaktayız .net ekibi işimizi kolaylaştırmak adına neredeyse tüm sınıflarına değerlere daha kısa yoldan ulaşmamız için dizinleyici oluşturmuştur.
C# ile Dizinleyici oluşturma ve kullanımı
Dizinleyicilerin ne olduğunu 2-3 örnekte anlatmaya çalışalım ve daha sonrasında kendi dizinleyicilerimizi sınıflarımıza nasıl dahil edeceğimizi görelim.
Session’da dizinleyici kullanımı
Yukarıda gördüğünüz gibi dizinleyiciler köşeli parantez ile açılarak kullanılmaktadır yukarıdaki gibi isterseniz birden fazla dizinleyici kullanabilirsiniz asp.net projesi geliştirdiyseniz Session nesnesini illaki kullanmışsınızdır mesela kullanıcıya ait id değerini session’a name adlı dizinleyici’yi kullanarak aktaryıroruz aşağıdaki gibi.
C#
1 | Session["Id"] = 1; |
Gördüğünüz gibi üstteki şekilde olduğu gibi sessiona id adında ve 1 değerini kaydetmiş oluyoruz. Bunun gibi indexleyiciler neredeyse .net’in tüm sınıflarında kullanılmıştır IENumerable, IECollection, Array, DataTable, DataRow, DataColumn ve daha .net’in bir sürü sınıfında kolaylıkla kullanabilirsiniz dizinleyicileri.
Şimdi örneğimize geçelim örneğimizde Console uygulaması kullanacağız ve sql server’daki verilerimize EntityFramework yapısını kullanarak ulaşacağız. Şimdi aşağıdaki Kullanıcı tablosunu veritabanınızda oluşturunuz ardından EntityFramework’u veritabanınızı kullanarak oluşturunuz. Kullanıcı tablosuna ait sql create script’i şu şekildedir.
SQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | DROP TABLE [Kullanıcı] GO CREATE TABLE [dbo].[Kullanıcı]( [id] [int] IDENTITY(1,1) PRIMARY KEY NOT NULL, [ad] [nvarchar](50) NULL, [sifre] [nvarchar](50) NULL, [dogum] [datetime] NULL, [mail] [nvarchar](50) NULL, [site] [nvarchar](50) NULL, ) GO SET IDENTITY_INSERT [dbo].[Kullanıcı] ON GO INSERT [dbo].[Kullanıcı] ([id], [ad], [sifre], [dogum], [mail], [site]) VALUES (1, N'Murat ÖNER', N'1111', CAST(N'1991-01-01 00:00:00.000' AS DateTime), N'info@muratoner.net', N'http://www.muratoner.net') GO INSERT [dbo].[Kullanıcı] ([id], [ad], [sifre], [dogum], [mail], [site]) VALUES (2, N'Muhammed Emin Öztürkler', N'2222', CAST(N'1991-01-01 00:00:00.000' AS DateTime), N'emin.ozturkler@gmail.com', N'http://www.muhammedeminozturkler.com') GO SET IDENTITY_INSERT [dbo].[Kullanıcı] OFF GO |
Ardından Kullanici adında yeni bir sınıf oluşturunuz ve içeriğini aşağıdaki şekilde doldurun.
C#(Kullanici.cs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | using System.Linq; namespace ConsoleApplication1 { public partial class Kullanıcı { public Kullanıcı this[int id] { get { using (var db = new NEWSEntities()) { return db.Kullanıcı.Find(id); } } } public Kullanıcı this[string ad] { get { using (var db = new NEWSEntities()) { return db.Kullanıcı.FirstOrDefault(u => u.ad.Contains(ad)); } } } } } |
Burada dikkat etmemiz gereken bazı noktalar var EntityFramework yapımızızı veritabanından oluşturduğumuz için Kullanıcı.cs adında bir sınıfımız zaten otomatik olarak oluşturulmakta ve tablo içerisindeki alanlar property olarak sınıf içerisine dahil edilmektedir eğer sizi yeni oluşturacağımız sınıfa Kullanıcı.cs derseniz otomatik olarak oluşturulan sınıfı ezecek böylelikle program hata verecektir o yüzden veritabanındaki tabloda türkçe karakter kullanmayıp Kullanıcı adını vermiş ama çakışma yaşanmasın diye yeni bir sınıf oluşturuken Kullanici adında bir sınıf oluşturdum fakat oluşturduğum sınıf otomatik olarak entity tarafından oluşturulmuş sınıfı genişletme adına kullanılmıştır bunuda partial anahtar kelimesinden anlıyoruz partial anahtar kelimesinin ne işe yaradığına gözatmak için buradaki makalemizi okumalısınız.
Şimdi ise tanımladığımız iki dizinleyicinin nasıl kullanıldığına ve sonuca gözatalım. Console uygulamamızın başlangıç sınıfı olaran Program.cs sınıfının içeriğini aşağıdaki şekilde değiştiriyoruz.
C#(Program.cs)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { /*Kendi oluşturduğumuz dizinleyicilerin *yer aldığı sınıfımızdan örnek alıyoruz*/ var kul = new Kullanıcı(); /*ad'ı parametre olarak geçerek veritabanında *murat olan ilk kaydı çekiyoruz.*/ var sonuc = kul["murat"]; Console.WriteLine("adı murat olan ilk kullanıcının bilgileri"); Console.WriteLine("Adsoyad: {0}", sonuc.ad); Console.WriteLine("Mail: {0}", sonuc.mail); Console.WriteLine("Site: {0}", sonuc.site); Console.WriteLine(""); /*isterseniz kullanıcının id'sini parametre *olarak geçip kullanıcı bilgilerini elde edebilirsiniz.*/ sonuc = kul[2]; Console.WriteLine("Id'si 2 olan kullanıcı bilgileri"); Console.WriteLine("Adsoyad: {0}", sonuc.ad); Console.WriteLine("Mail: {0}", sonuc.mail); Console.WriteLine("Site: {0}", sonuc.site); Console.ReadKey(); } } } |
Sonuç
C# ile Dizinleyici oluşturma ve kullanımı
1 2 3 4 5 6 7 8 9 | adı murat olan ilk kullanıcının bilgileri Adsoyad: Murat ÖNER Mail: info@muratoner.net Site: http://www.muratoner.net Id'si 2 olan kullanıcı bilgileri Adsoyad: Muhammed Emin Öztürkler Mail: emin.ozturkler@gmail.com Site: http://www.muhammedeminozturkler.com |