عملگر is
عملگر is در سی شارپ به شما اجازه میدهد که تست کنید که آیا یک شیء میتواند به طور کامل به وسیله تبدیل صریح به شیء دیگری تبدیل شود. عملگر is به دو عملوند نیاز دارد و یک مقدار بولی را برمی گرداند. به عنوان مثال، فرض کنید یک کلاس به نام Animel داریم، سپس یک نمونه از آن ایجاد میکنیم :
1: using System; 2: 3: class Animal 4: { 5: 6: } 7: 8: class Program 9: { 10: public static void Main() 11: { 12: Animal myAnimal = new Animal(); 13: 14: if (myAnimal is Animal) 15: { 16: Console.WriteLine("myAnimal is an Animal!"); 17: } 18: } 19: }
myAnimal is an Animal
رفتار عملگر is را در این مثال مشاهده کردید. همانطور که میبینید از آن به عنوان شرط در عبارت if استفاده شده است. کاربرد آن در مثال بالا این است که چک میکند که آیا شیء myAnimal یک نمونه از Animal است و چون نتیجه درست است کدهای داخل دستور if اجرا میشود. این عملگر همچنین میتواند چک کند که آیا یک شیء خاص در سلسله مراتب وراثت یک نوع خاص است. به این مثال توجه کنید :
1: using System; 2: 3: class Animal 4: { 5: 6: } 7: 8: class Dog : Animal 9: { 10: 11: } 12: 13: class Program 14: { 15: public static void Main() 16: { 17: Dog myDog = new Dog(); 18: 19: if (myDog is Animal) 20: { 21: Console.WriteLine("myDog is an Animal!"); 22: } 23: } 24: }
myDog is an Animal!
همانطور که در مثال بالا میبینید ما یک کلاس به نام Dog ایجاد کردهایم که از کلاس Animal ارث میبرد. سپس یک نمونه از این کلاس (Dog) ایجاد میکنیم و سپس با استفاده از عملگر is تست میکنیم که آیا نمونه ایجاد شده جز کلاس Animal است یا یک کلاس مشتق شده از کلاس Animal میباشد. از آنجاییکه کلاس Dog از کلاس Animal ارث میبرد (سگ من یک حیوان است.)، نتیجه عبارت درست (true) است. حال جمله بالا را تغییر دهیم: ” حیوان من یک سگ است”. وقتی جمله برعکس میشود چه اتفاقی می افتد؟
Animal myAnimal = new Animal(); if (myAnimal is Dog) { Console.WriteLine("myAnimal is a Dog!"); }
این باعث خطا نمیشود و عبارت فقط نتیجه false را بر میگرداند. میتوان از کد بالا این را درک کرد که همه حیوانات سگ نیستند ولی همه سگها حیوان هستند. راه دیگر برای چک کردن نوع یک شیء (object) استفاده از عملگر typeof و متد GetType() کلاس System.object است.
if (myAnimal.GetType() == typeof(Animal)) { }
متد GetType() یک شیء از نوع System.Type را بر میگرداند که نشان دهنده نوع شیئی که آن را فراخوانی کرده است، میباشد. عملگر typeof نام یک نوع را قبول کرده و شیء System.Type متناظر با آن را بر میگرداند.