۱.
is یک عملگر است که بررسی میکند آیا یک متغیر شیءای از یک کلاس هست یا نه. چیزی شبیه به instanceof در جاوا. همانطور که از توصیف بر میآید این عملگر یک مقدار boolean برمیگرداند.
۲.
is کل درخت ارثبری را بررسی میکند. مثلا:
C# |
---|
aTextBoxObj is System.Windows.Control == true |
۳.
در مورد
استفاده از
generic ها هم
حتما باید
آرگومان
مربوط به نوع
کلاس
generic ذکر بشود.
مثلا:
C# |
---|
class MyClass<T> {} ... MyClass<int> obj1 = new MyClass<int>(); MyClass<string> obj2 = new MyClass<string>(); ... obj1 is MyClass // Syntax Error obj1 is MyClass<int> == true obj1 is MyClass<string> == false |
۴.
as
یک عملگر
است که به شکلی
تبدیل نوع در
زمان اجرا را
انجام میدهد.
اگر تبدیل نوع
قابل انجام
باشد شیء تبدیل
شده را برمیگرداند
و در غیر این
صورت مقدار
null را. as
در
C# بسیار
شبیه است به
dynamic_cast در
C++.
۵.
مزیت
as نسبت به
type
cast با
پرانتز، این
است که در آن
اگر تبدیل نوع
قابل انجام
نباشد، دیگر
Exception
پرتاب نمیشود.
۶.
کاربرد
as به
شکل زیر است:
C# |
---|
object someObject; ... stirng str = someObject as string; if (str != null) { // means someObject is a string } |
۷.
as را میتوان
به صورت معادل
زیر نوشت:
C# |
---|
expression is type ? (type)expression : (type)null |
5 نظر:
مورد آخر رو خوب اومدی
اين سوال پيش مياد كه فرق بين دونوع روش كد نويسي زير چيه؟
1-
x = y as foo;
if (x != null)
{
}
else
{
}
2-
try
{
x = (foo)y;
}
catch (InvalidCastException)
{
}
بگذريم از اينكه as فقط براي
reference types
كاربرد داره.
فرق اولی اینه که از Exception فرار میکنه و کد قابلیت trace بیشتری داره. حالا چرا باید از Exception فرار کرد؟ چون Exception throwing and handling زمان بره (زمان بر در مقیاس عملیات ماشین). این کار عواقبی مثل stack unwinding و چیزهای دیگه داره. اما با همه این تفاسیر یه بحث سلیقهایه...
درست ميگي، تا حدود خيلي زيادي به سليقه بستگي داره.
اما يه نكته ريز وجود داره، درصورتيكه از as استفاده كنيم و فراموش كنيم كه مقدار بازگشتي رو چك كنيم،
ممكنه خطاي برنامه در نقطه ديگه اي خودش رو نشون بده، اما با explicit cast پيداكردن خطا سريعتره.
(بااينحال سليقه من همون as رو ترجيح ميده!)
به نکته خوبی اشاره کردی. کلا از بین روشهای مختلف برای انجام کاری، اون روشی که سریعتر و تابلوتر اشتباهی رو نشون میده، قابل اعتمادتره و کمتر به خطاهای ناآشکار در آینده منجر میشه. ممنون مهرداد جان.
ارسال یک نظر
جهت نمایش صحیح آدرس سایتتان، حتما قبل از آدرس //:http را درج کنید.