C# Object, Boxing, Cast, Unboxing, Var, dynamic

Leader-TR

Üye
11 Ağu 2018
182
50
Sanane

Object türü

Bütün türlere karşılık gelen bir türdür. Bütün türler object'ten türerler yani object bütün türleri kapsar. Object referans türlü bir değişkendir. Object türü değişkenler verileri bellekte object türünde tutarlar ama içlerinde tutuğu verilerin orijinal türlerini de saklarlar. Daha sonra bu verileri kendi türünden Unboxing yardımı ile elde edebiliriz. Object türü değişkenler genelde gelecek verinin türünün bilinmediği durumlarda kullanılır.

Boxing

Herhangi bir değer türü değişkeni referans türü olan object türündeki başka değişkene atama(gönderme/dönüştürme/içine yerleştirme) işlemine boxing denir.

C#:
static void Main(string[] args)
{
    int k = 333;
    object box;

    box = k;

    Console.WriteLine(k);
    Console.WriteLine(box);

    Console.ReadKey();
}

Burada int türündeki k değişkenini object türündeki box değişkenine atadık. İşte bu işleme Boxing denmektedir.
int türünden object türünü dönüşen 333 sayısı artık int türünden olmadığı için çarpma işlemi gibi int türüne ait işlemleri gerçekleştiremez. Eğer kendi türüne ait işlemleri gerçekleştirmek istersek object türü değişkene Unboxing işlemi yapmamız gerekmektedir.

Cast operatörü

Object türündeki herhangi bir veriyi kendi türüne dönüştürmek için kullanılan bir operatördür.

Kod:
(DönüşecekTürAdı)ObjeAdı

Şeklinde kullanılır. Burada () cast operatörü diyebiliriz.

C#:
int a = 2;
object c = a;

Console.WriteLine((int)c * 5);
Yukarıda Console.WriteLine((int)c * 5); satırında c object'ini int türünde unboxing ederek int türünün özelliği olan çarpma işlemini sorunsuzca kullandık.

Unboxing

Referans türü olan Object türündeki bir değişkeni değer türü bir değişkene dönüştürmek için unboxing işlemini kullanılırız.

C#:
static void Main(string[] args)
{
    int k;
    object box = 44;

    k = (int)box;
    Console.WriteLine(k + 2);

}

Yukarıda object türündeki box değişkenine toplama işlemi yapabilmek için k = (int)box; şeklinde unboxing işlemi gerçekleştirdik.

Unboxing ederken Object türüne aktarılmış değişkenin orijinal türü ile unboxing işlemi gerçekleştirmeliyiz. Aksi taktirde run time esnasında hata alırsınız.

Var Keywordü


Kısaca oluşturduğunuz değişkenin türünün verdiğiniz değişken değerine göre otomatik olarak belirlenmesini istiyorsanız var keywordünü kullanırsınız.
C#:
var sayi = 3;

Bu örnekte gördüğünüz gibi var keywordü sayi değişkeninin otomatik olarak int türünde olmasını sağladı.
Asıl kullanım nedeni diller arasındaki entegrasyonda kullanılmasıdır. var keywordü ile tanımlanan değişkenlerin değeri tanımlanma esnasında verilmedir.


dynamic keyword

Yapı olarak var keywordüne benzemektedir yani dynamic keywordü ile bir değişkeni tanımladığımızda türü otomatik olarak belirlenmektedir. Var ile fakları ise var keywordü ile tanımlanan değişken derleme aşamasında türü belirlenirken, dynamic keywordü ile tanımlanan değişken runtime da türü otomatik olarak belirlenir.

Dynamic tanımladığın bir değişkeni var'In aksine daha sonradan başka türde bir değişken atayabilirsin.


C#:
dynamic x = 2;
Console.WriteLine(x);

x = "Osman";

Console.WriteLine(x);

Çıktı:
Kod:
2
Osman

Yukarıda gördüğünüz gibi dynamic olarak tanımladığımız bir değişkenin runtime içeresinde başka türde bir değişken atayabiliyoruz.
Asıl kullanım amacı dışarıdan türünü bilmediğimiz verilerin bir değişkende tutulmasını sağlamaktır.
 

'The Wolf

Kıdemli Üye
22 Nis 2021
4,043
2,565
Tanrı dağı

Object türü

Bütün türlere karşılık gelen bir türdür. Bütün türler object'ten türerler yani object bütün türleri kapsar. Object referans türlü bir değişkendir. Object türü değişkenler verileri bellekte object türünde tutarlar ama içlerinde tutuğu verilerin orijinal türlerini de saklarlar. Daha sonra bu verileri kendi türünden Unboxing yardımı ile elde edebiliriz. Object türü değişkenler genelde gelecek verinin türünün bilinmediği durumlarda kullanılır.

Boxing

Herhangi bir değer türü değişkeni referans türü olan object türündeki başka değişkene atama(gönderme/dönüştürme/içine yerleştirme) işlemine boxing denir.

C#:
static void Main(string[] args)
{
    int k = 333;
    object box;

    box = k;

    Console.WriteLine(k);
    Console.WriteLine(box);

    Console.ReadKey();
}

Burada int türündeki k değişkenini object türündeki box değişkenine atadık. İşte bu işleme Boxing denmektedir.
int türünden object türünü dönüşen 333 sayısı artık int türünden olmadığı için çarpma işlemi gibi int türüne ait işlemleri gerçekleştiremez. Eğer kendi türüne ait işlemleri gerçekleştirmek istersek object türü değişkene Unboxing işlemi yapmamız gerekmektedir.

Cast operatörü

Object türündeki herhangi bir veriyi kendi türüne dönüştürmek için kullanılan bir operatördür.

Kod:
(DönüşecekTürAdı)ObjeAdı

Şeklinde kullanılır. Burada () cast operatörü diyebiliriz.

C#:
int a = 2;
object c = a;

Console.WriteLine((int)c * 5);
Yukarıda Console.WriteLine((int)c * 5); satırında c object'ini int türünde unboxing ederek int türünün özelliği olan çarpma işlemini sorunsuzca kullandık.

Unboxing

Referans türü olan Object türündeki bir değişkeni değer türü bir değişkene dönüştürmek için unboxing işlemini kullanılırız.

C#:
static void Main(string[] args)
{
    int k;
    object box = 44;

    k = (int)box;
    Console.WriteLine(k + 2);

}

Yukarıda object türündeki box değişkenine toplama işlemi yapabilmek için k = (int)box; şeklinde unboxing işlemi gerçekleştirdik.

Unboxing ederken Object türüne aktarılmış değişkenin orijinal türü ile unboxing işlemi gerçekleştirmeliyiz. Aksi taktirde run time esnasında hata alırsınız.

Var Keywordü


Kısaca oluşturduğunuz değişkenin türünün verdiğiniz değişken değerine göre otomatik olarak belirlenmesini istiyorsanız var keywordünü kullanırsınız.
C#:
var sayi = 3;

Bu örnekte gördüğünüz gibi var keywordü sayi değişkeninin otomatik olarak int türünde olmasını sağladı.
Asıl kullanım nedeni diller arasındaki entegrasyonda kullanılmasıdır. var keywordü ile tanımlanan değişkenlerin değeri tanımlanma esnasında verilmedir.


dynamic keyword

Yapı olarak var keywordüne benzemektedir yani dynamic keywordü ile bir değişkeni tanımladığımızda türü otomatik olarak belirlenmektedir. Var ile fakları ise var keywordü ile tanımlanan değişken derleme aşamasında türü belirlenirken, dynamic keywordü ile tanımlanan değişken runtime da türü otomatik olarak belirlenir.

Dynamic tanımladığın bir değişkeni var'In aksine daha sonradan başka türde bir değişken atayabilirsin.


C#:
dynamic x = 2;
Console.WriteLine(x);

x = "Osman";

Console.WriteLine(x);

Çıktı:
Kod:
2
Osman

Yukarıda gördüğünüz gibi dynamic olarak tanımladığımız bir değişkenin runtime içeresinde başka türde bir değişken atayabiliyoruz.
Asıl kullanım amacı dışarıdan türünü bilmediğimiz verilerin bir değişkende tutulmasını sağlamaktır.
Eline Sağlık Güzel Konu Olmuş.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.