مثيل "كما" الكلمات الرئيسية
سؤال
لقد بدأت مؤخرا العمل مع سلمان و ExtJs إطار جئت عبر التعليمة البرمجية التالية في مثال.
نحن استرداد المعلومات من الواجهة باستخدام هذا:
object updatedConfig = JavaScriptConvert.DeserializeObject(Request["dataForm"]);
ثم في المثال يفعلون التالية:
JavaScriptObject jsObj = updatedConfig as JavaScriptObject;
أنا لم أر قط "كما" الكلمة المستخدمة مثل هذا من قبل.هذا هو مجرد شكل آخر من أشكال صراحة الملاكمة updatedConfig متغير كما JavaScriptObject أو هل هناك شيء أنا لا فهم هذا ؟
شكرا
المحلول
هذا هو المعروف باسم آمنة المدلى بها.ما يفعله هو أنه يحاول أن يلقي من نوع واحد إلى آخر وإذا كان يلقي فشل يعود null
بدلا من رمي InvalidCastException
.
هناك بالفعل اثنين من منفصلة IL تعليمات التعامل مع الفرق بين "as
"الصب العادي ثابت الصب.التالي C# كود يحتوي على كلا النوعين من الصب:
using System;
class Program
{
static void Main()
{
Object o = null;
String s0 = (String)o;
String s1 = o as String;
}
}
أول الزهر يستخدم castclass
IL التعليمات الثاني يلقي يستخدم isinst
التعليمات.
يرجى الاطلاع صب مقابل استخدام 'كما' الكلمة في CLR للحصول على شرح أكثر تفصيلا.
نصائح أخرى
كما الكلمة هو أكثر أمانا طريقة ليلقي الكائنات في C #.
SomeType a = obj as SomeType;
ويعني أنه إذا obj
هو من نوع SomeType
، سوف يلقي obj
إلى هذا النوع. إذا obj
غير خالية أو ليس من النوع SomeType
، وسيكون لاغيا.
وثمة ميزة أخرى من حيث الكلمة هو أنه سوف يلقي استثناء وقت الترجمة إذا كان نوع لا يمكن أن يلقي حيث و(الزهر) لا يفطر حتى وقت التشغيل.
وبالإضافة إلى ذلك، من المهم أن نتذكر أن "بأنها" تعمل في إشارة وليس في الكائن نفسه. هذا هو السبب في أنه يمكن أن يعود لاغية بدلا من رمي استثناء، لأن الكائن ستبقى على حالها. وهذا هو السبب يمكنك أن تفعل ذلك فقط على أنواع مرجع.
وعادة لا يهم كثيرا، ولكن إذا قمت بتطبيق وظيفة الصب (مثل هنا في <لأ href = "http://msdn.microsoft.com/en-us/library/xhbhezf4.aspx" يختلط = " نوفولو noreferrer "> MSDN ) وسوف <م> لا م> التذرع باستخدام كمشغل.
وهكذا، وكمشغل من المفيد أن "التحرك صعودا ونزولا على hiearchy الميراث": إذا كان لديك شخص الطبقة، يمكنك القيام به: شخص ص = شخص جديد ()؛ ojbect س = ع وجوه. ص = س كما شخص. ولكن في جميع الحالات لن يتم تعديل الكائن في الذاكرة بأي شكل من الأشكال، مجرد الإشارة إلى ذلك.
وعلى أمل أن يساعد