سؤال

لقد بدأت مؤخرا العمل مع سلمان و 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 س = ع وجوه. ص = س كما شخص. ولكن في جميع الحالات لن يتم تعديل الكائن في الذاكرة بأي شكل من الأشكال، مجرد الإشارة إلى ذلك.

وعلى أمل أن يساعد

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top