سؤال

لقد وجدت مؤخرًا هذا الرمز:

 public static implicit operator XElement(XmlBase xmlBase)
 {
     return xmlBase.Xml;
 }

ماذا فعلت static implicit operator يعني؟

هل كانت مفيدة؟

المحلول

هذا ال مشغل التحويل. هذا يعني أنه يمكنك كتابة هذا الرمز:

XmlBase myBase = new XmlBase();
XElement myElement = myBase;

ولن يشكو المترجم! في وقت التشغيل ، سيتم تنفيذ مشغل التحويل - تمرير myBase في الحجة ، وإعادة صالحة XElement كنتيجة.

إنها طريقة لك كمطور لإخبار المترجم:

"على الرغم من أن هذين يشبهان نوعين غير مرتبطين تمامًا ، إلا أن هناك بالفعل طريقة للتحويل من أحدهما إلى الآخر ؛ فقط اسمحوا لي أن أتعامل مع المنطق لكيفية القيام بذلك."

نصائح أخرى

مثل هذا المشغل الضمني يعني أنه يمكنك التحويل XmlBase إلى XElement بشكل ضمني.

XmlBase xmlBase = WhatEverGetTheXmlBase();
XElement xelement = xmlBase;   
//no explicit convert here like: XElement xelement = (XElement)xmlBase;

إنه عامل تحويل ضمني (على عكس عامل صريح ، يتطلب (type) بناء جملة التحويل)

استخدام آخر مثير للاهتمام هو (أي الوحدة التي فعلت للتحقق مما إذا كان كائن (وبالتالي مثيل من monobehavior) فارغ):

public static implicit operator bool (CustomClass c)
{
    if (c == null) return false;
    else return true;
}

بهذه الطريقة يمكنك أن تفعل شيئًا كهذا:

void Method ()
{
    CustomClass c1 = null;
    CustomClass c2 = new CustomClass ();

    bool b1 = c1; // is false
    bool b2 = c2; // is true

    if (!c1 && c2)
    {
        // Do stuff
    }
}

من الواضح أن الاستخدام الأكثر شهرة قد يستخدمه لتحويل أحد فصولك إلى فصول أخرى. لكن استخدامها مع الأنواع الأساسية يستحق النظر أيضًا ... وأرى أنه نادراً ما يتم ذكره.

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