C# as ve is Operatörlerinin Kullanımı
is Operatörünün Kullanımı
Boxing ve Unboxing işlemleri yapılırken veya sıradan bir tip dönümüşümü yaparken is operatörünü kullanarak programımızın dönüştürme hatası vermemesini kontrol edebiliriz. Bir değişkenin tipinini dönüşüm yapmak istediğimiz tiple is ile karşılaştırarak çevrimin doğru olup olmuyacağını karşılaştırabiliriz. Yani is ile boolean bir değer elde edilir. is Anahtar sözcüğünün örnek kullanımı:
static void Main(string[] args)
{
String derivedObj = "Dummy";
Object baseObj1 = new Object();
Object baseObj2 = derivedObj;
Console.WriteLine("baseObj2 {0} String",
baseObj2 is String ? "is" : "isnot");
Console.WriteLine("baseObj1 {0} String",
baseObj1 is String ? "is" : "isnot");
Console.WriteLine("derivedObj {0} Object",
derivedObj is Object ? "is" : "isnot");
int j = 123;
object boxed = j;
object obj = new Object();
Console.WriteLine("boxed {0} int",
boxed is int ? "is" : "isnot");
Console.WriteLine("obj {0} int",
obj is int ? "is" : "isnot");
Console.WriteLine("boxed {0} System.ValueType",
boxed is ValueType ? "is" : "isnot");
}
bu programın çıktısı :baseObj2 is String
baseObj1 isnot String
derivedObj is Object
boxed is int
obj isnot int
boxed is System.ValueType
görüldüğü gibi is anahtar sözcüğü değişkenin tipinin karşılaştırma tipine bakarak bize o mu değil mi bilgisini vererek tip dönüşümlerinde fayda sağlamaktadır. is sadece tanımlı tipler üzerinde çalışır. Yani biz bir class tanımladıysak ve bunun tipi hakkında bilgi almak istiyorsak is bize bu konuda yardımcı olamayacaktır.
As Operatörünün Kullanımı
Daha önce is sadece tanımlı tipler üzerinde çalıştığını. Yani biz bir class tanımladıysak ve bunun tipi hakkında bilgi almak istiyorsak is bize bu konuda yardımcı olamayacağını söylemiştik. Bu durumda devreye as anahtar kelimesi devreye girer. is operotoruyle çok benzerdi fakat is operatoru boolean bir değer döndürürken as operatoru hedef tipin referansını döndürür. Eğer dönüşüm imkansız ise null değeri döndürür. As operatorunun örnek kullanımına bakarsak :
using System;
public class BaseType { }
public class DerivedType : BaseType { }
public class EntryPoint{
static void Main(){
DerivedType derivedObj = new DerivedType();
BaseType baseObj1 = new BaseType();
BaseType baseObj2 = derivedObj;
DerivedType derivedObj2 = baseObj2 as DerivedType;
if (derivedObj2 != null){
Console.WriteLine("Conversion Succeeded");
}else{
Console.WriteLine("Conversion Failed");
}
derivedObj2 = baseObj1 as DerivedType;
if (derivedObj2 != null){
Console.WriteLine("Conversion Succeeded");
}else{
Console.WriteLine("Conversion Failed");
}
BaseType baseObj3 = derivedObj as BaseType;
if (baseObj3 != null){
Console.WriteLine("Conversion Succeeded");
}else{
Console.WriteLine("Conversion Failed");
}
}
}
Bu programın çıktısı :
Conversion Succeeded
Conversion Failed
Conversion Succeeded
0 yorum :
Yorum Gönder