C# Sınıflar

     Merhaba, C# derslerimize Sınıflar ile devam ediyoruz. Nesne yönelimli programlama mantığının temeli olan sınıflar, C#’ın en önemli konularından birisidir. Bu konuyu tam anlamıyla öğrenip bol bol alıştırmalar örnekler yaparsanız, C# dilini büyük ölçüde öğrenmiş olursunuz. Önceki derslerimizde kullandığımız kodların bir çoğunda aslında sınıfları gördük. Sınıflar konusu uzun olduğu için 3 parçada anlatmaya çalışacağım. Dolayısıyla bu ilk makalemiz olacak.

DERS 10 : Sınıflar

Sınıf, nesne yönelimli programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır.

Wikipedia
Sınıf nedir?

     Sınıf, birbiri ile alakalı özellikleri ve metotları bir arada tutan bir şablondur diyebiliriz. Örnek ile açıklamaya çalışalım. Bankacılık sektörünün olmazsa olmaz ürünü hesaplardır. Her bankanın kendi hesap sistemi vardır. Her hesap sisteminde şu özellikler genelde bulunur: müşteri numarası, şube kodu, para birimi ve sıra numarası. Kod örneklerimiz daha anlamlı olsun diye biz buna bir de bakiye ekleyelim. Şimdi bir düşünün, hesaplar ile alaklı bir program yazacaksınız. Hesabın içinde bulunan tüm bu 5 değişkeni ayrı ayrı tanımlayıp bunlara ayrı ayrı isimler mi vereceksiniz? Ya da iki hesabı gösterebilmek için 10 tane değişken mi tanımlayacaksınız? Elbette ki hayır. Account (hesap) isimli bir sınıf tanımlayıp bu 5 özelliği sınıfın içine yazacağız ve işlerimiz çok daha kolay yürüyecek. Nasıl yapılacağını makalenin ilerleyen bölümlerinde anlatacağım.

Sınıf nasıl yazılır?

     Sınıfları tanımlayan anahtar kelimemiz class‘tır. Sınıfları istersek ana programımızla aynı .cs dosyası içerisine yazabiliriz; ancak benim tavsiyem ve kullanacağım yöntem ayrı bir .cs dosyası oluşturup içerisine sadece oluşturacağımız sınıf ile ilgili bilgileri yazmak. Şimdi, yukarıda bahsettiğimiz hesap sınıfını oluşturalım. Daha öncesinde yeni bir konsol projesi oluşturup adını MoneyTransfer (Para Transferi) yapalım.

money-transfer

     Daha sonra Solution Explorer üzerinde projemize sağ tıklayıp Add – Class seçeneğini seçerek yeni sınıf oluşturma penceresini açalım. Alt kısımdaki sınıf adı bölümüne Account.cs yazıp tamam diyelim ve sınıfımızın oluştuğunu görelim.

add-classnew-classaccount-class

     Sınıfımız oluştuğunda aşağıdaki gibi bir kod bloğu ile oluşuyor:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MoneyTransfer
{
    class Account
    {
    }
}

     Şimdi biz bu kod bloğunu kendimize göre değiştirelim ve değiştirirken de sınıfları öğrenelim. Gördüğünüz gibi class anahtar kelimemiz ile Account sınıfımız tanımlanmış. Sınıfları kullanabilmemiz için erişim belirleyicilerini öğrenmemiz gerekir.

     Erişim belirleyicileri, oluşturduğumuz sınıfa ve elemanlarına nerden erişilebileceğini belirler. Toplamda 5 adet erişim belirleyicisi olmakla beraber, biz bu yazımızda sadece ikisinden bahsedeceğiz: public ve private. Public olarak tanımladığımız sınıflar, özellikler ve metotlar her yerden, her dosyadan çağrılabilir olurlar. Private olarak tanımlananlar ise, sadece aynı sınıf içerisinden çağrılabilirler. Yazacağımız Account sınıfını asıl programımızda kullanacağımız için bu sınıfımızın public olması gerekiyor. Bu tanımı şu şekilde yapıyoruz:

public class Account
{
}

     Sınıfımız hazır, şimdi gelelim özelliklerini tanımlamaya. Özellik yani property aslında sınıf içerisinde kullanacağımız, dışarıya açık değişkenlerdir. Account sınıfı için 5 adet değişkenimiz yani özelliğimiz olacağından bahsetmiştik. Şimdi bu özellikleri oluşturalım ve hepsine erişebilmemiz için hepsini public olarak tanımlayalım.

public class Account
{
    public long CustomerNo;
    public int BranchCode;
    public int CurrencyCode;
    public short OrderNo;
    public decimal Balance;
}

     Gördüğünüz gibi aslında sadece değişken tanımlaması yaptık. Şimdi asıl programımıza dönelim ve bu hesap sınıfını kullanalım. Program.cs dosyamızı açalım ve aşağıdaki kod bloğunu Main metodunun içerisine yazalım.

static void Main(string[] args)
{
    Account myAccount = new Account();
    myAccount.BranchCode = 123;
    myAccount.CurrencyCode = 1;
    myAccount.CustomerNo = 123456;
    myAccount.OrderNo = 1;
    myAccount.Balance = 500;

    Console.WriteLine(myAccount.BranchCode);
    Console.WriteLine(myAccount.CurrencyCode);
    Console.WriteLine(myAccount.CustomerNo);
    Console.WriteLine(myAccount.OrderNo);
    Console.WriteLine(myAccount.Balance);

    Console.ReadKey();
}

     Kodumuzun ilk satırında, Account sınıfından bir nesne oluşturduk. Yeni bir nesne oluştururken new anahtar kelimesini kullandık. Daha sonra oluşturduğumuz bu nesneye ait değişkenlere değerler atadık. Değişkenlere erişebilmek için “.” operatörünü kullandık. Nesnenin adını yazıp “.” koyarsanız, Visual Studio size yazabileceğiniz değerleri pencere açarak gösterir (bu özelliğe intellisense denir). Değişkenlere değer atamasını yaptıktan sonra, ekrana bu değerleri yazdırdık. Şimdi sınıfımıza geri dönelim ve bir metot ekleyelim. Account.cs dosyamızı açıyoruz ve hesap bilgilerini ekrana basan bir metot yazıyoruz. Sınıfımızın son hali şöyle oluyor:

public class Account
{
    public long CustomerNo;
    public int BranchCode;
    public int CurrencyCode;
    public short OrderNo;
    public decimal Balance;

    public void PrintAccountInfo()
    {
        Console.WriteLine(BranchCode);
        Console.WriteLine(CurrencyCode);
        Console.WriteLine(CustomerNo);
        Console.WriteLine(OrderNo);
        Console.WriteLine(Balance);
    }
}

     Dikkatinizi çekmediyse belirteyim hemen, yeni yazdığımız metodumuzun da başına public anahtar kelimesini ekliyoruz. Eğer private yazsaydık veya hiçbir şey yazmasaydık (bu durumda da private yazmışız gibi kabul edilecekti) ve bu metodu asıl programımızdan çağırmaya çalışsaydık aşağıdaki hatayı alacaktık:

MoneyTransfer.Account.PrintAccountInfo()’ is inaccessible due to its protection level

     Program.cs dosyasına geri dönüp, ekrana yazdırma yapan satırları siliyoruz ve hesap sınıfımızın içerisindeki yazdırma metodunu kullanıyoruz.

static void Main(string[] args)
{
    Account myAccount = new Account();
    myAccount.BranchCode = 123;
    myAccount.CurrencyCode = 1;
    myAccount.CustomerNo = 123456;
    myAccount.OrderNo = 1;
    myAccount.Balance = 500;

    myAccount.PrintAccountInfo();

    Console.ReadKey();
}

     Sizin de görebileceğiniz gibi sonuç aynı oldu. Böylelikle sınıfımıza 5 adet özellik ve 1 adet metot eklemiş olduk. Bir sonraki yazımızda görüşmek üzere…

     Güncelleme (08.11.2015): Makaleyi yazarken Account sınıfına property ekleyelim demişim; ancak field eklemişim. Programın çalışma mantığını değiştirmiyor; ancak paylaştığım koddaki tanımlama şekli field tanımına daha çok uyuyor. Field tanımları genelde private alanlar için kullanılır. Property ise public olarak kullanılır; ancak değişkenin yanında {get; set;} metotları (bir sonraki makalede daha detaylı değineceğim) bulunmalıdır. Örnek:

private long customerNo; //Field
public long CustomerNo //Property
{
    get
    {
        return customerNo;
    }
    set
    {
        this.customerNo = value;
    }
}

Bu makaleye 5 yorum yapılmış

  • tahir

    10 Nisan 2016 at 03:50 Cevapla

    tebrik ederim faydalı bi kaynak olmuş ne zaman devam edeceksiniz takip ediyorum

    • Kemal Kefeli

      12 Nisan 2016 at 06:43 Cevapla

      Merhaba, ilginiz için teşekkürler. Uzun zamandır vakit bulamıyorum; ancak yazmaya devam etmek istiyorum. İnşaallah en kısa zamanda devam edeceğim…

  • Barış

    23 Nisan 2016 at 11:47 Cevapla

    Hocam merhaba, devamını bekliyoruz umarım uzun sürmez. Video’lu anlatım düşünüyor musunuz hocam?

    • Kemal Kefeli

      23 Nisan 2016 at 12:36 Cevapla

      Merhaba, videolu anlatım için sessiz bir ortam ve uzun bir çalışma lazım. O biraz zor görünüyor; ancak yazıya devam etmek istiyorum. Bakalım belki bu hafta sonu C# Sınıflar 2’yi yazabilirim. Takip ettiğiniz için teşekkürler…

      • Barış

        23 Nisan 2016 at 17:16 Cevapla

        Yazmanın daha zor olacağını düşündüğüm için sormuştum. Cevabınız için teşekkürler. Başarılarınızın devamını diliyorum.

Yorum Yapın

*

warning
www.kemalkefeli.com.tr üzerindeki herhangi bir yazının veya kodun izinsiz olarak başka bir yerde kullanılması yasaktır.