LinkedIn FriendFeed Twitter

C# 3.0 İle Gelen Yenilikler

by Ordinaryus 8. February 2009 18:54

Bundan birkaç ay önce BIDB içinde yazmış olduğum dokumanlardan. Eski kaçtı sanırım Bloga Laughing 

 

C# 3.0 İle Gelen Yenilikler

İlkolarak 2005 yılındaki PDC (Professional Developer Conference) ileduyurulmuştur. Yenilikler içerisinde ilk göze çarpan özellik veri türütanımlama işlemlerinin yapılmasına gerek kalmamasıdır. İlk atanandeğerin türü veri türü olarak oluşturulmakta, bunun haricinde Lambdaifadeleri ve LINQ en önemli yeniliklerdir.

Tür belirtilmeden türetilen değişkenler

C#3.0 ile gelen ve en sık kullanılan özelliklerden birisidir. Yeni birdeğişken tanımlarken daha önce olduğu gibi değişkenlerin türlerinibelirtmek yerine var anahtar sözcüğü kullanılaraktürünü vermeden değişken tanımlama imkanına sahip olunmaktadır.Değişkenlerin türlerinin belirlenmesi derleme zamanındabelirlendiğinden herhangi bir performans kaybına da neden olmamaktadır.Bu özellik kullanılırken unutulmaması gereken nokta yaratılandeğişkenin o anda atama işlemine tabi tutulmasıdır yoksa bu değişkentanımı geçersiz sayılmaktadır.

var ogrenciAdi = "TestOgrenci";
var numarasi = 60519;

Console.WriteLine(ogrenciAdi.GetType());

Console
.WriteLine(numarasi.GetType());

Console.WriteLine(ogrenciAdi + "öğrencinin numarası: " + numarasi);

Buözellik kullanılırken dikkat edilmesi gereken bir diğer nokta ilktanımlama yapılırken atanan değer daha sonra başka bir atama iledeğiştirilmek istendiği takdirde yeni değerinde önceki değer ile aynıolması gerekmektedir.
Değişkenlerde olduğu gibi veri türleri oluştururken de var anahtar sözcüğü kullanılabilir.

Yapıcılandırıcıların aşırı yüklenmesi

Nesnelerinoluşturulması sırasında o sınıfa ait yapıcı yordam kullanılmaktadır.Farklı sayıda veya türde parametre kullanmak için yapıcılara aşırıyükleme yapmak mümkündür. C# 3.0 ile bu biraz daha geliştirilereknesneye ait özellikler tek bir yapıcı üzerinde tanımlanarakkullanılabilmektedir. Bu sayede girilecek parametrelerin sayısına görefarklı yapıcı yordamlar oluşturulmamış olacaktır.

public class iletisimBilgi
{

    public int telefon;

    public string adres;

}

public class ogrenci
{
    public int ID;
    public string isim;
    public iletisimBilgi iletisim;
}
var ogrenci1 = new ogrenci { ID = 34567 };

var ogrenci2 = new ogrenci { isim = "TestOgrenci", ID = 34578 };



Parçalı Metotlar (Partial Methods)

Parçalı sınıflardaki yapıya benzer şekilde C# 3.0 ile birlikte metotları da partial(parçalı)  tanımlamak mümkün olmaktadır. Böylece yazılımgeliştiricinin kodunun herhangi bir yerinde tanımlamış olduğu birmetodun işlevlerini tanımlaması için o koda bağımlı kalması gerekmez.

Metodun tanımlanması ve kullanılması farklı alanlarda yapılabilir hale gelmektedir. Parçalı metotların tanımlanması sırasında partial sözcüğü kullanılmalıdır ve her zaman void dönmek zorundadır. Parçalı metotlar tanımlandıklarında private olarak oluşturulurlar. Parçalı metotlar için delegate (temsilci) oluşturulamaz.

Genişletme Metodları (Extension Methods)

Genişletmemetotları C# 3.0 ile birlikte gelen yeni yapılar ve öncekiversiyonlarda yer alan metotların kullanımının devamının sağlanmasıiçin kullanılmaya gerek duyulmuştur. Genişletme metotları ile sahipolunan sınıflar manual (elle) yaratılmamış olsa dahi sonradan yeniözellikler katılabilmesini sağlamaktadır. Öyleki bu sayedekoleksiyonlar, datatable, dizi gibi var olan CLR (Common LanugageRuntime) tipleri üzerinde LINQ tarzı sorgu ifadelerinin yazılabilmesiolanaklı hale gelmiştir.

Genişletme metotları var olantiplere ek işlevler kazandırılmasını sağlarken bunların orijinalyapısını asla bozmazlar. Tanımlandıkları programda, uygulandıklarıtipin bir parçası olarak yaşar ama o tipin orijinalliğine etki etmedenek işlevselliklerin kullanılabilmesini olanaklı kılarlar. Genişletmemetodlarının oluşturulması sırasında unutulmaması gereken bir nokta bumetotların static olarak tanımlanma zorunluluğudur.

Lambda İfadeleri

Lambdaifadeleri C# 3.0 ile gelen belkide en önemli özelliklerden birisidir.Bunun nedenleri arasında karmaşık işlemleri basit şekilde yazılmasınaolanak sağlaması açısından yazılımcılara yararının yanı sıra LINQ konusunda da fazlasıyla kullanışlıdır.

Framework tabanlı dillerde kullanılmakta olan Lambda ifadeleri Lisp, Python gibi dillerde de bulunmaktadır. Lambda operatörü ( => )bool sonuç döndürmekte olan bir operatördür. Lambda operatörünün nedenbu kadar önemli olduğunu anlamak açısından delege (temsilci) yapısındanbahsetmek daha yararlı olacaktır.

İlk zamanlardan itibaren.NET içerisinde temsilcilere yer verilmektedir. Değişkenlerin türleriolduğu gibi yordamların da kendilerine özgü türleri vardır. Bu türleritemsil eden yapılara temsilci denmektedir. Temsilciler yordamlarınkonumlarına işaret etmektedir ve ne zaman bir yordamı kullanmak istesektemsilciler aracılığı ile onlara ulaşmak mümkün olmaktadır.

public delegate int temsilci(int carpan1, int carpan2);

public static void Main(string[] args)
{
    var temsilci1 = new temsilci(carpma);
    int carpim = temsilci1(3, 4);
        Console.WriteLine(carpim);
}
static int carpma(int sayi1, int sayi2)
{
    return sayi1 * sayi2;
}


Burada unutulmaması gereken noktalardan birisi temsilcilerinyordamların adreslerine işaret etmelerinden dolayı tanımlanan yordamlarstatic olmak zorundadır.

Aşağıda Lambda operatörü ile benzer işlemin ne kadar kısa yapabildiğini gösteren bir uygulama bulunmaktadır.


public delegate int toplama(int toplanan1, int toplanan2);
public static void Main(string[] args)
{
    toplama islem = (x, y) => x + y;
    int toplam = islem(3, 4);
    Console.WriteLine(toplam);
}


Aşağıda, lambda ifadelerinin LINQ  ile olan uygulamalarına geçilmeden önce kısaca LINQdan bahsedilmiştir.

LINQ (Language Integrated Query)

LINQdil ile bütünleşmiş sorgu kelimelerinin harflerinden oluşmuş birifadedir. Burada isminden de anlaşılacağı gibi dil içerisinde ifadelerkullanılarak yapılan sorgular akla gelmektedir. Veritabanları belki deLINQ'in isminin en çok anılmasına sebep veren alandır ama LINQ sadeceveritabanı için değil daha pek çok uygulamada kullanılabilecek gelişmişözelliklere sahiptir.

LINQ genel olarak genişletmemetotları ve Lambda ifadeleri kullanmaya dayanan bir yapıdır. Farklıkullanım alanlarına göre sahip olduğu metotlar bulunmakta ve bunlarınbelli başlıklar altında toparlanabilmesi mümkün olabilmektedir. XLINQve DLINQ bunlara örnek verilebilir. DLINQ veritabanı işlemlerindekullanılan sorguların C# dili ile gerçekleştiği şeklidir. Aynı şekildeXLINQ içinde XML içeriklerinin sorgulanmasında kullanıldığından önemlibir yere sahiptir.


List<Calisan> Calisanlar = new List<Calisan>();
Calisanlar.Add(new calisan{isim = “TestOgrenci1”, no = 123});
Calisanlar.Add(new calisan{isim = “TestOgrenci2”, no = 124});
Calisanlar.Add(new calisan{isim = “TestOgrenci3”, no = 125});
Calisanlar.Add(new calisan{isim = “TestOgrenci4”, no = 126});
Calisanlar.Add(new calisan{isim = “TestOgrenci5”, no = 127});

IEnumerable<string> sonuclar = from val in calisanlar where val.no>125 orderby val.isim select val.isim.ToUpper();

var isimler = “ ” ;
foreach(string ad in sonuclar)
{
    isimler += ad + “ ” ;
}
Console.WriteLine(isimler);

Tags:

.NET

Comments

Add comment




  Country flag

Click to change captcha
biuquote
  • Comment
  • Preview
Loading



Powered by BlogEngine.NET 1.5.0.7
Theme by Mads Kristensen

Ordinaryus Hakkında

Hayata gözlerini İzmirde açtı. 3 yaşında legolarla oynadı =) Küçük yaşta baskete başladı zaten başka sporlarla arası hiç olmadı. Orta okulda matematikle ilgilendi. Liseyi Karşıyaka Anadolu Lisesinde okudu. 

İTÜ Elektronik Mühendisliğinden 2010 yılında mezun oldu. Fizik bölümünde çift anadala kabul oldu lisans hayatına Fizikten devam etmekte. Koç Üniversitesinde Bilgisayar Mühedisliği Master programına kabul edildi ve akademik hayatının ilk adımlarını sevdiği bir alanda çalışarak atıyor. Fizik ve Bilgisayarın ortak noktalarını gördü ve bunları geliştirmek amacıyla çalışıyor.

Yazılımı sevdi.. Başlarda herşeyle ilgilendi web programlama da yaptı, sokette programladı yeri geldi ağ yönetimi ile uğraştı. Görüntü işlemeden keyif aldı Makine Öğrenmesi ve Örüntü Tanımada kendisini geliştirmeyi istemekte.

2008te MSP oldu belkide bu blogu yazmaya başlamasında en büyük etken=) Bu görevi 2 sene boyunca sürdürdü. Bir yandan 2008de EuroSkillsde Mobil Robotik alanında Türkiyeyi temsil etti. Ardından 2009da Kanada da tekrardan yarışmacı olarak bulundu. Artık bu alanda hakemlik yaparak ve Robotino hakkında öğrendiklerini paylaşarak faydalı olmaya çalışıyor. 

Yapay Zeka, Görüntü İşleme, Kuantum Mekaniği, İstatistik Mekanik ve Bilişsel Bilimlerle ilgili. Geceleri kafasına göre takılıyo. Sabahlarıda öğrencilik yapıyo =)

gibi gibi... 

 

Page Rank

Loading

Google Translate


Şuan ne okuyorum

Bilişsel Psikoloji

Singularity is Near


Ayrıca okuduklarımdan seçtiğim kitaplara buradan ulaşabilirsiniz..

Okuduklarımı üye olarak takip etmek için ise aşağıdaki RSS bağlantısını kullanabilirsiniz. Ayrıca bana kitapta hediye edebilirsiniz =)


CCL


Copyright © Ordinaryus Says That by http://www.vypro.org/ is licensed under a Creative Commons Attribution-No Derivative Works 3.0