C#
is ve as operatörleri
is ile tür testi ve as ile güvenli dönüşüm yapmayı öğrenirsin.
is ile tür testi
is operatörü bir nesnenin belirli bir türe dönüştürülebilir olup olmadığını sınar. Sonuç bool döner. if (animal is Dog) yazısı, animal nesnesi Dog türüne uyuyorsa true verir.
as operatörü ise güvenli dönüşüm yapar. Dönüşüm başarısızsa hata fırlatmak yerine null döner. Dog dog = animal as Dog; yazısından sonra dog ya bir Dog örneğidir ya da null'dır. as ile çalışırken sonucu null karşılaştırmasıyla kontrol edersin.
Tipik as kullanımı
Genel desen şudur: önce as ile dönüştür, sonra null kontrolü yap. Bu, doğrudan dönüşümün InvalidCastException fırlatma riskini ortadan kaldırır.
Örnek: bir List<Animal> içinde dolaşıp Dog olanları bulmak istersen, as Dog ile dene ve null değilse Bark çağır. Böylece her öğeyi denemez, yalnızca doğru türdekileri işlersin. Bu desen polimorfik koleksiyonlarda çok yaygındır.
Uygulama as ile Dog örneklerini bul
Animal sınıfı tanımla. Dog : Animal sınıfı içinde public void Bark() metodu Console.WriteLine("Hav") yazsın. Main içinde List<Animal> oluştur; içine bir Dog, bir Animal, bir Dog koy. foreach ile her öğeyi as Dog ile dene, null değilse Bark çağır.
Örnek çözümü göster
Animal { public void Bark() { Console.WriteLine("Hav"); } } yaz. Main'de List<Animal> { new Dog(), new Animal(), new Dog() } oluştur. foreach ile her öğeyi Dog d = a as Dog; ile dönüştür, if (d != null) d.Bark(); çağır.
Örnek çözüm:
using System;
using System.Collections.Generic;
class Animal { }
class Dog : Animal
{
public void Bark()
{
Console.WriteLine("Hav");
}
}
class Program
{
static void Main()
{
var animals = new List<Animal> { new Dog(), new Animal(), new Dog() };
foreach (var a in animals)
{
Dog d = a as Dog;
if (d != null)
{
d.Bark();
}
}
}
}
Kendini test et
-
Operatörü görevine eşle
- is
- Tür testi yapar
- as
- Güvenli dönüşüm döndürür
- (T)
- Hatalı dönüşüm fırlatır
- typeof
- Type nesnesi verir
-
Güvenli dönüşüm operatörü
Dog dog = animal ____ Dog;
Cevabı göster
Dog dog = animal as Dog;
-
as ile dönüşüm başarısız olursa ne olur?
Cat c = animal as Cat;
// animal aslında Dog ise
- InvalidCastException fırlar
- NullReferenceException fırlar
- c null olur
- Derleme hatası verir
Cevabı göster
c null olur — Doğru. as başarısız dönüşümde null döndürür, hata fırlatmaz.
Sıradaki ders: Polimorfizmde pattern matching