C# (C Sharp) Ders 1 – Değişkenler ve Değişken Tipleri

C#, Microsoft tarafından geliştirilen modern ve açık kaynaklı Nesneye Yönelik bir programla dilidir. Sözdizimi (syntax) C, C++ ve Java gibi C tarzı dillerin sözdizimine benzer. C# ile yazılmış bir kod bloğunun çalıştırılabilmesi için .Net (DotNet) SDK’sı gereklidir. C# kodu yazmak için Visual Studio IDE’si veya daha hafif olan Visual Studio Code kullanılabilir.

C#, statik tipli bir programlama dilidir, yani değişken türleri derleme zamanında belirli olmak zorundadır. Derleme zamanında değişkenlerin türleri gerekli kontrollerden geçer, böylece çalışma hatalarının önüne geçilmesi hedeflenmektedir.

Noktalı virgüller (;) bir ifadenin sonunu belirtmek için kullanılır.

Birden fazla ifade süslü parantezler ({}) arasında kullanılır.

C# iki farklı açıklama türünü destekler:

Tek satırlı açıklamalar, (//) işaretinden sonra kullanılır.

Çok satırlı açıklamalar (/* */) işaretleri arasında kullanılır.

Örnek kullanım:

C#
using System;

{*
Çok satırlı
açıklama satırı örneği
*}

namespace HelloWorld
{
    class Program

    {
        static void Main(string[] args)

        {
            Console.WriteLine("Merhaba, Dünya!"); // Tek satırlı açıklama örneği
        }
    }
}

Açıklama satırları derleyici tarafından görmezden gelinir. Geliştirilen yazılım projelerinde, kod revizyonları sırasında veya kodlarla başka yazılımcılar ilgilendiğinde; kod bloklarının ne işler yaptıklarını belirten yorum satırları yazmak kodların anlaşılmasında yardımcı olur.

Değişkenler ve Değişken Türleri

Bir yazılım projesi üretilirken sıklıkla değişkenlere başvurulur. C# ile bir değişken tanımlamak için değişkenin ismi ve türünün belirtilmesi gereklidir. Değişken isimleri bir harf veya altçizgi işareti (_) ile başlar; bir harf, altçizgi (_) veya bir rakamla devam eder. Değişken isimleri bir rakamla başlamaz.

Örnek kullanım:

C#
using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            string isim = "Mehmet"; // string türünde bir değişken tanımlandı
            int _yas = 20; // int yani tamsayı türünde bir değişken tanımlandı

            Console.WriteLine("Kişinin adı: " + isim; // Kişinin adı konsola yazdırıldı
            Console.WriteLine("Kişinin yaşı: " + _yas; // Kişinin yaşı konsola yazdırıldı
        }
    }
}

C# programla dilinde “var” anahtar kelimesi ile değişken tanımlamak mümkündür. Bu durumda derleyici değişkenin türünü otomatik olarak belirleyip atayacaktır, fakat değişkenin değer atanarak tanımlanması gereklidir.

Örnek kullanım:

C#
using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            string isim = "Mehmet"; // string türünde bir değişken tanımlandı
            int _yas = 20; // int yani tamsayı türünde bir değişken tanımlandı
            var departman = "İnsan Kaynakları"; // değişken türü derleyici tarafından atanır

            Console.WriteLine("Kişinin adı: " + isim; // Kişinin adı konsola yazdırılır
            Console.WriteLine("Kişinin yaşı: " + _yas; // Kişinin yaşı konsola yazdırılır
            Console.WriteLine("Kişinin departmaanı: " + departman; // Kişinin departmanı konsola yazdırılır
        }
    }
}

C#’ta iki temel veri tipi desteklenmektedir:

  • Değer tipindeki veriler (value type): int, long, float, double, decimal, char, bool, byte, short, struct, enum
  • Referans tipindeki veriler (reference type): string, object, class, interface, array, delegate

Değer türündeki değişkenler hafızanın stack (yığın) bölgesinde tutulur ve verinin kendisini tutarlar, fakat referans türündeki değişkenler ise, hafızanın heap (öbek) bölgesinde tutulur ve verinin referanslarını tutarlar. String veri tipi teoride referans tipli olmasına rağmen program içerisinde değer tipli olarak işlem görmektedir. Değer tipindeki değişkenler bir metoda parametre olarak aktarıldıklarında, değişkenin bir kopyası metoda gönderilir ve yapılan işlemler sonucunda orijinal değişkenin sahip olduğu eski değer değişmez. Fakat, referans tipindeki değişkenler bir metoda gönderildiklerinde, sadece referansı aktarılır ve yapılan değişiklikler değişkenin orijinal değerini değiştirir.

Değer tipinde veri yapıları:

Tür

Açıklama

Min ve Max aralık değeri

bool

True (doğru) false (yanlış) değerlerini tutar

 

byte

1 byte (8 bit) işaretsiz tamsayı

0 : 255

sbyte

1 byte (8 bit) işaretli tamsayı

-128 : 127

int

4 byte (32 bit) işaretli tamsayı

-2 147 483 648 : 2 147 483 647

uint

4 byte (32 bit) işaretsiz tamsayı

0 : 4 294 967 295

short

2 byte (16 bit) işaretli tamsayı

-32 768 : 32 767

ushort

2 byte (16 bit) işaretsiz tamsayı

0: 65 635

long

8 byte (64 bit) işareti tamsayı

-9 223 372 036 854 775 808 : 9 223 372 036 854 775 807

ulong

8 byte (64 bit) işaretsiz tamsayı

0 : 18 446 744 073 709 551 615

float

4 byte (32 bit) ondalık sayı

Virgülden sonra 6-7 haneye kadar duyarlı

double

8 byte (64 bit) ondalık sayı

Virgülden sonra 15-16 haneye kadar duyarlı

decimal

16 byte (128 bit) ondalık sayı

Virgülden sonra 28-29 haneye kadar duyarlı

char

2 byte (16 bit)

Bütün Unicode karakterleri tutar


string


Referans tipindeki değişkenlerin hafızada kapladıkları alan tuttukları veri miktarı ile orantılı olarak değişir

Unicode karakterlerden oluşan string

 Veri Türü Dönüşümleri

C# programlama dilinde, bir veri türü başka bir veri türüne dönüştürülebilir, fakat dikkat edilmesi gereken noktalar bulunmaktadır.

Örtülü Dönüşüm (Implicit Conversion): Veri kaybının yaşanmadı durumlarda gerçekleşen dönüşümü ifade eder. Örneğin, long veri tipi boyut olarak int veri tipinden daha kapsamlı olduğu için, int tipinden long tipine veri kaybı yaşanmadan dönüşüm gerçekleşir.

C#
int yas = 20;
long _yas = yas;

Console.WriteLine(yas); // konsola 20 yazılır
Console.WriteLine(_yas); //konsola 20 yazılır

Açık Dönüşüm (Explicit Convercion): Bu dönüşüm işlemi sırasında veri kaybı yaşanabilmektedir. Dönüşümün yapılması istenilen veri türü parantez içerisinde atama işleminden önce belirtilir.

C#
float toplam = 2.4f;
int _toplam = (int)toplam;

Console.WriteLine(toplam); // konsola 2.4 yazılır
Console.WriteLine(_toplam); // konsola 2 yazılır

Kutulama (Boxing) ve Kutudan Çıkarma (Unboxing): Referans ve değer tipindeki veriler arasında dönüşüm yapılmaktadır. Bir int, referans tipine atanırsa Kutulama, tam tersi durumda ise Kutudan Çıkarma işlemi gerçekleşmiş olur.

Kutulama örneği:

C#
int yas = 25;
object _yas = yas;

Console.WriteLine(yas); // konsola 25 yazılır
Console.WriteLine(_yas); //konsola 25 yazılır

 Kutudan Çıkarma örneği:

C#
Object _yas = 30;
int yas = (int)_yas;

Console.WriteLine(_yas); // konsola 30 yazılır
Console.WriteLine(yas); //konsola 30 yazılır

 Kaynak: https://learn.microsoft.com/tr-tr/dotnet/csharp/tour-of-csharp/tutorials/