includeprogram.com
  • info@includeprogram.com
  • Odaklanmak, 1000 iyi fikre hayır diyebilmektir. (Steve Jobs)

C# Programlama

C# Tarihi

C# Tarihi

C#, programlama dillerinin süregelen gelişiminde bir sonraki adımı temsil eder, C#‟ın ortaya çıkışının kökleri derinlere, geçmiş birkaç yıl boyunca bilgisayar dillerinin gelişimini nitelemekte olan geliştirme ve adaptasyon süreçlerine kadar uzanır. Daha önce ortaya çıkan başarılı dillerin tümünde olduğu gibi, C# da bir yandan programlama sanatını daha ileriye taşırken, öte yandan geçmişin üzerine inşa edilmiştir.

Devamını Oku
C # ile .Net Framework Arasındaki Bağlantı

C # ile .Net Framework Arasındaki Bağlantı

C# kendi başına incelenebilecek bir bilgisayar dili olmasına rağmen C#‟ın çalıştırma ortamı (runtime environment) ile, yani .NET Framework ile özel bir ilişkisi vardır. Bunun iki sebebi vardır. Birincisi, C# başlangıçta Microsoft tarafından .NET Framework için kod geliştirmek amacıyla tasarlanmıştı. İkincisi, C# tarafından kullanılan kütüphaneler, .NET Framework tarafından tanımlanan kütüphanelerdi. Yani, C# dilini .NET ortamından ayırmak mümkün olsa dahi her ikisi birbiriyle sıkı sıkıya bağlıdır. Bu nedenle, .NET Framework'ü genel olarak anlamak ve bunun C# için önemini kavramak gereklidir.

Devamını Oku
C# Programlamaya Giriş

C# Programlamaya Giriş

Programları elle kodlamak isterseniz, bu konuda özgürsünüz. Bu durumda, Notepad gibi bir metin editörü kullanarak programı bilgisayarınıza kodlamalısınız. Unutmayın, salt metin dosyaları oluşturmalısınız; biçimlendirilmiş kelime işlemci dosyaları oluşturmamaya dikkat edin, çünkü kelime işlemci dosyasındaki biçimlendirme bilgileri C# derleyicisini şaşırtacaktır. Programı kodlarken, dosyaya Example.cs adını verin.

Devamını Oku
Kontrol İfadesi

Kontrol İfadesi

Bir metodun içinde kontrol, yukarıdan aşağıya doğru bir ifadeden diğerine geçerek ilerler. Ancak, bu akışı C# tarafından desteklenen çeşitli program kontrol ifadeleri kullanarak değiştirmek de mümkündür. Kontrol ifadelerine daha sonra yakından göz atacak olmamıza rağmen, iki tanesini burada kısaca tanıtacağız, çünkü örnek programları yazmak için bunları kullanacağız.

Devamını Oku
Noktalı Virgüller ve Konumlandırma

Noktalı Virgüller ve Konumlandırma

Bildiğiniz gibi bir blok, açılış ve kapanış küme parantezleri ile çevrelenmiş mantıksal olarak birbirine bağlı bir takım ifadelerden oluşur. Blok noktalı virgül ile sona ermez. Blok, her biri noktalı virgül ile sona eren bir grup ifadeden oluştuğu için bloğun noktalı virgül ile bitmemesi mantıklıdır. Noktalı virgül yerine kapanış küme parantezi bloğun sonuna işaret eder.

Devamını Oku
Veri Tipleri

Veri Tipleri

C# nümerik tiplerinin belki de en ilginci, parasal hesaplamalarda kullanılması planlanan decimal tipidir, decimal tipi, 1E-28 ile 7.9E+28 arasındaki değerleri simgelemek için 128 bit kullanır. Bildiğiniz gibi, kayan noktalı normal aritmetik, ondalık sayılara uygulandığında çeşitli yuvarlama hatalarına maruz kalır. decimal tipi bu hataları ortadan kaldırır ve sayıları 28 ondalık basamağa kadar (bazı durumlarda 29 basamağa kadar) hatasız simgeleyebilir.

Devamını Oku
Literaller

Literaller

C#"ta literaller, insanların okuyabileceği biçimde temsil edilen sabit değerlere karşılık gelir. Örneğin, 100 sayısı bir literaldir. Literaller ayrıca yaygın olarak sabit (constant) olarak da adlandırılır. Çoğunlukla literallerin kendileri ve kullanımları o kadar bellidir ki önceki örnek programların tümünde, şu veya bu şekilde literal kullanılmıştır. Artık bunları kurallı olarak açıklamanın zamanı geldi.

Devamını Oku
İlişkisel ve Mantıksal Operatörler

İlişkisel ve Mantıksal Operatörler

İlişkisel operatörler (relational operators) ve mantıksal operatörler (logical operators) terimlerinde geçen ilişkisel sözcüğü değerlerin birbiri arasında sahip olabileceği ilişkiyi; mantıksal sözcüğü ise true ve false değerlerin birbiriyle bağlanabilme yollarını ifade eder. İlişkisel operatörler true veya false sonuçlarını ürettikleri için, genellikle mantıksal operatörlerle birlikte kullanılırlar. Bu nedenle, burada mantıksal operatörlerle birlikte ele alınacaklardır.

Devamını Oku
Bit Tabanlı Operatörler

Bit Tabanlı Operatörler

C#, uygulanabileceği problem tiplerini genişleten birtakım bit tabanlı (bitwise) operatörler sunmaktadır. Bit tabanlı operatörler doğrudan operandlarının bitleri üzerinde işlem yaparlar. Bit tabanlı operatörler yalnızca tamsayı operandlar için tanımlıdır. bool, float ve double üzerinde kullanılamazlar.

Devamını Oku
Program Kontrol İfadeleri

Program Kontrol İfadeleri

C#‟ın program kontrol ifadeleri ele alınıyor. Program kontrol ifadeleri üç kategoride toplanır: seçme ifadeleri, if ve switch ifadeleridir; iterasyon ifadeleri, for, while, dowhile ve foreach döngülerinden oluşur; atlama ifadeleri, break, continue, goto, return ve throw‟u içerir. C#‟ın kural dışı durum yürütme mekanizmasının bir parçası olan ve daha sonra ele alınacak throw‟un haricindekiler burada incelenmektedir.

Devamını Oku
Kümelenmiş Switch İfadeleri

Kümelenmiş Switch İfadeleri

Bir switch‟i dıştaki bir switch‟in ifade sekansının bir parçası olarak kullanmak mümkündür. Buna kümelenmiş switch (nested switch) denir. İçteki ve dıştaki switch‟lerin case sabitleri ortak değerler içerebilir; bu durumda hiçbir karışıklık ortaya çıkmayacaktır. Örneğin, aşağıdaki kod parçaları tamamen kabul edilebilir.

Devamını Oku
While Döngüsü

While Döngüsü

Burada ifade, tek bir ifade de olabilir, bir ifade bloğu da olabilir; koşul ise döngüyü kontra eden koşulu tanımlar ve geçerli herhangi bir Boolean deyim olabilir. İfade, koşul doğru iken gerçeklenir. Koşul yanlış değerini alırsa, program kontrolü hemen döngüyü takip eden satıra geçer.

Devamını Oku
Sınıflara Nesnelere ve Metotlara Giriş

Sınıflara Nesnelere ve Metotlara Giriş

Sınıf, C#‟ın özüdür, çünkü sınıf, nesnenin doğasını tanımlar. Sınıf, bütün bir C# dilinin ürerine inşa edildiği bir temeldir. Öyle ki, sınıf, C#‟ta nesne yönelimli programlamanın esaslarını oluşturur. Sınıf içinde veriler ve bu veriler üzerinde işlem yapan kod tanımlanır. Kod, rnetotlar içinde yer alır. Sınıf, nesne ve metotlar C#‟ın belli başlı özellikleri olduğu için, bunlar bu bölümde tanılılmaktadır.

Devamını Oku
Referans Değişkenleri ve Atama İşlemleri

Referans Değişkenleri ve Atama İşlemleri

Bir atama işleminde referans değişkenleri, bir değer tipinin, örneğin int tipinin, değişkenlerinden daha farklı davranırlar. Bir değer tipi değişkenini bir diğerine atarken durum apaçık ortadadır. Sol taraftaki değişken, sağ taraftaki değişkenin değerinin bir kopyasını alır. Bir nesne referans değişkenini bir diğerine atarken ise, durum biraz daha karmaşıktır, çünkü referans değişkeninin ilişkili olduğu nesneyi değiştiriyorsunuz. Aradaki bu farkın etkisi beklenmeyen bazı sonuçlar doğurabilir.

Devamını Oku
Parametre Kullanmak

Parametre Kullanmak

Bir metot çağrıldığı zaman, metoda bir veya iki değer aktarmak mümkündür. Önceden açıklandığı gibi, bir metoda aktarılan değere argüman denir. Metot içinde, argümanı kabul eden değişkene parametre denir. Parametreler, metot isminin peşinden gelen parantezler içinde deklare edilirler. Parametreleri deklare etmek için kullanılan söz dizimi, değişkenler için kullanılan ile aynıdır. Bir parametre kendi metodunun kapsamı içindedir ve argüman kabul etmek gibi özel görevi bir tarafa, tıpkı diğer yerel değişkenler gibi davranır.

Devamını Oku
new Operatörüne Tekrar Bir Bakış

new Operatörüne Tekrar Bir Bakış

Burada sınıf-değişkeni, oluşturulmakta olan sınıf tipindeki değişkendir, sınıfismi, örneklenmekte olan sınıfın ismidir. Ardından parantezlerin geldiği sınıf ismi, sınıfa ait yapılandırıcıyı belirtir. Eğer bir sınıf kendi yapılandırıcısını tanımlamıyorsa new, C# tarafından sağlanan varsayılan yapılandırıcıyı kullanacaktır. Böylece new, herhangi bir sınıf tipinde nesneleri oluşturmak için kullanılabilir.

Devamını Oku
Diziler ve Karakter Dizileri

Diziler ve Karakter Dizileri

Dizi (array), ortak bir isim ile anılan aynı tipteki değişkenler topluluğudur. Tek boyutlu diziler çok daha yaygın olmasına rağmen C#‟ta diziler bir veya daha fazla boyutlu olabilir. Diziler çok çeşitli amaçlarda kullanır, çünkü diziler, ilgili değişkenleri bir araya getirip, gruplamak için uygun bir yöntem sunmaktadır. Örneğin, bir ay için günlük en yüksek sıcaklık kayıtlarını, hisse senedi fiyatlarının listesini veya programlama kitaplarından oluşan koleksiyonunuzu tutmak için bir dizi kullanabilirsiniz.

Devamını Oku
Düzensiz Diziler

Düzensiz Diziler

İki boyutlu bir dizi oluşturduğunuzda C#‟ta dikdörtgensel dizi olarak adlandırılan bir dizi oluşturmuş oluyordunuz. İki boyutlu bir diziyi bir tablo olarak düşünürsek, dikdörtgensel bir dizi, satırların her birinin bütün bir dizi için aynı uzunlukta olduğu iki boyutlu bir dizidir. Ancak, C#‟ta ayrıca düzensiz dizi (jagged array) denilen özel tipte iki boyutlu dizi oluşturmanıza da imkan verilir. Bir düzensiz dizi, her biri farklı uzunlukta dizilerin oluşturduğu bir dizidir. Böylece, satır uzunlukları aynı olmayan tabloları oluşturmak için bir düzensiz dizi kullanılabilir.

Devamını Oku
Karakter Dizileri

Karakter Dizileri

Programlamayla ilgili görüşler günden güne değişse de, C#‟ın en önemli veri tiplerinden biri string‟dir. string, karakter katarlarını tanımlar ve destekler. Diğer birçok programlama dilinde string, bir karakter dizisidir. Oysa, C#‟ta böyle bir durum söz konusu değildir. C#‟ta string, bir nesnedir. Yani, string bir referans tipidir. C#‟ta string standart bir veri tipi olmasına rağmen, string ile ilgili açıklamaların sınıf ve nesneler tanıtılana kadar beklemesi gerekliydi.

Devamını Oku
Metot ve Sınıfların Detayları

Metot ve Sınıfların Detayları

Bu bölümde sınıf ve metotları incelenmeye devam ediyoruz. Bir sınıfın üyelerine erişimin nasıl kontrol edilebileceği incelenerek bölüme başlanıyor. Sonra nesnelerin aktarılması ve döndürülmesi, metotların aşırı yüklenmesi (overloading), Main()‟in çeşitli şekilleri, yinelenme (recursion) ve static anahtar kelimesinin kullanımı ele alınıyor.

Devamını Oku
Metotlara Nesne Aktarmak

Metotlara Nesne Aktarmak

İlk yöntem, değer olarak çağrıdır. Bu yöntem, argümanın değerini alt rutinin tanımlı parametresine kopyalar. Bu sayede, alt rutinin parametresi üzerinde yapılan değişikliklerin çağrıda kullanılan argüman üzerinde hiçbir etkisi yoktur. Argüman aktarmak için ikinci yöntem ise referans olarak çağrıdır. Bu yöntemde argümanı gösteren bir referans (argümanın değeri değil) parametreye aktarılır. Alt rutinin içinde bu referans, çağrıda belirtilen asıl argümana erişmek için kullanılır.

Devamını Oku
Referans Parametrelerinde ref ve out Kullanmak

Referans Parametrelerinde ref ve out Kullanmak

ref ve out kullanımı yalnızca değer parametreleriyle sınırlı değildir. Bunlar referans parametrelerinde de, örneğin bir nesne referansı aktarıldığı zaman da ayrıca kullanılabilir. ref veya out bir referans parametresi üzerinde değişiklik yapınca, bu durum, referansın kendisinin referans olarak aktarılmasına neden olur. Böylece metodun, referansın ilişkili olduğu nesneyi değiştirmesine imkan verilir. Aşağıdaki programı ele alın. Bu programda, iki referansın ilişkili olduğu nesneleri değiş-tokuş etmek için ref parametreleri kullanılmaktadır.

Devamını Oku
Metotların Aşırı Yüklenmesi

Metotların Aşırı Yüklenmesi

C#‟ın en heyecan verici özelliklerinden biri olan metotların aşırı yüklenmesi konusunu öğreneceksiniz. C#‟ta aynı sınıfın içindeki iki ya da daha fazla metot, parametre deklarasyonları farklı olduğu sürece, aynı ismi paylaşabilirler. Böyle metotlara aşırı yüklenmiş metot denir. Bu işleme de metodun aşırı yüklenmesi adı verilir. Metodun aşırı yüklenmesi, C#‟ın çok biçimliliği uygulama yollarından biridir.

Devamını Oku
Main Metodu

Main Metodu

Şu ana dek Main() metodunun tek şeklini kullanmaktaydınız. Ancak, Main()‟in aşırı yüklenmiş çeşitli şekilleri vardır. Kimisi bir değer döndürmek için kullanılabilir, kimisi argüman alabilir. Bunların her biri burada incelenmektedir.

Devamını Oku
Static Yapılandırıcılar

Static Yapılandırıcılar

Bir yapılandırıcı da static olarak belirtilebilir, static bir yapılandırıcı tipik olarak bir örneğe değil de bir sınıfa ait olan niteliklere (attributes) başlangıç değeri atamak için kullanılır. Bir başka ifade ile, static bir yapılandırıcı, bir sınıfa ait herhangi bir nesne oluşturulmadan önce o sınıfın bazı özelliklerine ilk değer atayabilir.

Devamını Oku
Dönüşüm Operatörleri

Dönüşüm Operatörleri

Bazı durumlarda, bir sınıfa ait bir nesneyi diğer veri tiplerini içeren bir deyim içinde kullanmak isteyeceksiniz. Bazen bir veya daha fazla operatörü aşırı yüklemek bunu gerçekleştirmek için yardımcı olabilir. Ancak, diğer durumlarda ihtiyacınız olan yalnızca, söz konusu sınıf tipinden hedef tipe dönüşümdür. Bu gibi durumları ele almak için C#, dönüşüm operatörü (conversion operator) denilen özel bir operatör metodu tipi tanımlamanıza imkan verir.

Devamını Oku
İndeksleyiciler ve Özellikler

İndeksleyiciler ve Özellikler

Bildiğiniz gibi, dizi indeksleme işlemi [] operatörü kullanılarak gerçekleştirilir. [] operatörünü, kendi oluşturduğunuz sınıflar için aşırı yüklemeniz mümkündür; fakat bir operatör metodu kullanamazsınız. Bunun yerine, bir indeksleyici tanımlarsınız. İndeksleyici, bir nesnenin tıpkı bir dizi gibi indekslenmesine imkan verir. İndeksleyiciler temel olarak, bir veya daha fazla kısıtlamaya tabi olan özel dizilerin oluşturulmasını desteklemek için kullanılır.

Devamını Oku
İndeksleyiciler ve Özelliklerin Kullanımı

İndeksleyiciler ve Özelliklerin Kullanımı

Önceki örnekler, indeksleyiciler ve özelliklerle ilgili temel mekanizmayı bize gösterdiler, ama bunların tam gücünü henüz ortaya koymadılar. Bölümü tamamlamak üzere yapacağımız örnekte, RangeArray adlı bir sınıf geliştireceğiz. Bu sınıf, indeks aralığı programcı tarafından geliştirilen bir dizi tanımlamak için indeksleyiciler ve özellikler kullanmaktadır.

Devamını Oku
Kalıtım (Inheritance)

Kalıtım (Inheritance)

Kalıtım, nesne yönelimli programlamanın üç temel prensibinden biridir, çünkü kalıtım, hiyerarşik sınıflandırma oluşumlarına olanak tanır. Kalıtım kullanarak, birbiriyle bağlantılı bir grup öğenin ortak özelliklerini tanımlayan genel bir sınıf oluşturabilirsiniz. Bu sınıf daha sonra diğer, daha spesifik sınıflara kalıtım yoluyla aktarılır ve her sınıf kendisine özgü özellikleri buna ekler.

Devamını Oku
Protected Erişim Kullanımı

Protected Erişim Kullanımı

Az önce açıklandığı gibi, bir temel sınıfın bir private üyesi bir türetilmiş sınıf tarafından erişilemez. Buradan şöyle bir sonuç çıkmaktadır: Bir türetilmiş sınıfın temel sınıfın içindeki bazı üyelere erişebilmesini istiyorsanız, türetilmiş sınıfın public olması gerekir. Kuşkusuz söz konusu üyeyi public hale getirmek, ayrıca bu üyeyi kodun diğer bölümlerinin erişimi için de public hale getirir.

Devamını Oku
Kalıtım ve İsim Gizleme

Kalıtım ve İsim Gizleme

Bir türetilmiş sınıfın temel sınıftaki bir üye ile aynı ismi taşıyan bir üye tanımlaması mümkündür. Böyle bir durum söz konusu olunca temel sınıfın üyesi türetilmiş sınıf içinde gizlenmiş olur. Bu, C#‟ta teknik olarak bir hata olmasa da derleyici bir uyarı mesajı verecektir. Bu bir ismin gizlenmekte olduğu gerçeğine işaret edecektir. Eğer niyetiniz temel sınıf üyesini gizlemek ise, bu durumda bu uyarıyı önlemek için türetilmiş sınıf üyesinin öncesinde new anahtar kelimesini kullanmalısınız.

Devamını Oku
Yapılandırıcılar Ne Zaman Çağrılır

Yapılandırıcılar Ne Zaman Çağrılır

Kalıtım ve sınıf hiyerarşileri yukarıda ele alınırken önemli bir soru aklınıza takılmış olabilir: Türetilmiş bir sınıf oluşturulunca önce kimin yapılandırıcısı çalıştırılır; türetilmiş sınıfın yapılandırıcısı mı, yoksa temel sınıf tarafından tanımlanan yapılandırıcı mı? Örneğin, B adında bir türetilmiş sınıf ve A adında bir temel sınıf verildiğini varsayalım. A‟nın yapılandırıcısı B‟ninkinden önce mi çağrılır, yoksa sonra mı?

Devamını Oku
Sanal Metotlar ve Devre Dışı Bırakma (Overriding)

Sanal Metotlar ve Devre Dışı Bırakma (Overriding)

Sanal metot, temel sınıf içinde virtual olarak deklare edilen ve bir veya daha fazla türetilmiş smıf içinde yeniden tanımlanan bir metottur. Böylece, her türetilmiş sınıf bir sanal metodun kendine özgü bir versiyonuna sahip olabilir. Sanal metotlar ilginçtir, çünkü sanal metotlardan biri bir temel sınıf referansı tarafından çağrıldığında ortaya çıkan durum ilginçtir. Bu durumda, referans tarafından referansta bulunulan nesnenin tipine bağlı olarak C#, söz konusu metodun hangi versiyonunun çağrılacağını belirler ve bu belirleme çalışma zamanında gerçekleştirilir.

Devamını Oku
Abstract Sınıfların Kullanımı

Abstract Sınıfların Kullanımı

Bu tür bir sınıf, türetilmiş sınıfların uygulamaları gereken metotların özünü belirler, fakat bu metotlardan biri ya da daha fazlası için kendisi bir uygulama sağlamaz. Temel sınıf, anlamlı bir metot uygulaması oluşturamadığı zaman böyle bir durumla karşılaşılabilir.

Devamını Oku
Arayüzler (Interface)

Arayüzler (Interface)

Nesne yönelimli programlamada bir sınıfın ne yapması gerektiğini tanımlamak, fakat bunu nasıl yapacağını tanımlamamak kimi zaman yararlı olabilir. Bunun bir örneğini görmüştünüz: Özet metot. Özet metot, bir metot için bir imza tanımlar, ama söz konusu metodun nasıl uygulanacağını tarif etmez. Türetilmiş metot, kendi temel sınıfı tarafından tanımlanan özet metotların her biri için kendi uygulamasını sağlamalıdır. Böylece; özet metot, metot için gerekli arayüzü belirtirken metodun nasıl uygulanacağının hakkında bilgi vermez.

Devamını Oku
Arayüz (Interface) Özellikleri

Arayüz (Interface) Özellikleri

Bir arayüz kalıtım yoluyla bir başkasına aktarılabilir. Söz dizimi kalıtımın aktarıldığı sınıflar için aynıdır. Bir arayüz kalıtım yoluyla bir başka arayüze aktarılıyorsa, bu arayüzü uygulayan bir sınıf, arayüz kalıtım zinciri içinde tanımlanan tüm üyeler için gerekli uygulamaları da sağlamalıdır.

Devamını Oku