خوب حالا میرسیم به یه مسئله جذاب دیگه که استفاده از as و is هستش، حالا چطوری؟ اینطوری:
public class Base{}
public class Derived : Base{}
object b = new Base();
Console.WriteLine(b is Base); // output : True
Console.WriteLine(b is Derived); // output : False
object d = new Derived();
Console.WriteLine(d is Base); // output : True
Console.WriteLine(d is Derived); // output : True
توی مثالی که در بالا نوشته شده میایم از is برای چک کردن تایپ اون کلاس استفاده میکنیم، یعنی چی؟
یعنی این که به طور مثال آیا b از نوع و تایپ Base هست؟ خوب میبنیم که خروجیش شده true
حالا ایا b از نوع و تایپ Derived هستش؟ خیر و اینجا جوابش false هستش
حالا در مرحله ی بعد اومدیم از کلاس Derived که مشتق شده از کلاس Base هستش یه instance میسازیم و حالا میایم با is چکش میکنیم:
آیا d از نوع و تایپ کلاس Base هستش : جوابش True هستش
آیا d از نوع کلاس مشتق شده هستش : جوابش True هستش
حالا توی مثال بالا استفاده is رو دیدیم ، حالا میخوایم مدل استفاده as رو ببینیم چجوریه:
خوب همونطوری که میبنید اینجا یه downcast اتفاق افتاده ، حالا یعنی چی؟ یعنی این که یک کلاس پدر رو ریختیم داخل یک کلاس مشتق شده از کلاس پدر.
در این حالت اگر به هر دلیلی downcasting به مشکل بخوره به ما ارور میده.
مدل بعدی استفاده از as هستش :
Derived b = a as Derived
حالا تفاوت مدل اولی با دومی چیه؟؟ اینه که توی حالت دوم اگر نتونه به هر دلیلی تبدیل رو انجام بده به ما null میده
b= null
حالا بیایم ببینیم این دو در کنار هم کاربردشون چیه؟
کاربردش اینه که اول میایم با is چک میکنیم ببینیم که آبجکتی که داریم از اون نوعی که مد نظر ما هستش یا نه و بعد اگر بود میایم با as تبدیلش میکنیم به تایپی که میخوایم.