استخدام عوامل التحويل (دليل البرمجة لـ #C)

يمكن أن تكون عوامل التحويل explicit أو implicit. عوامل التحويل الضمنية أسهل من ناحيه الاستخدام لكن العوامل الصريحة مفيدة عندما تريد من مستخدمي العامل إدراك أنه يتم حدوث التحويل. يوضح هذا الموضوع كلا النوعين.

مثال

وهذا مثال على عامل تشغيل التحويل الصريح. يحول هذا العامل من نوع Byte إلى نوع قيمة باسم Digit. بما أنه لا يمكن تحويل كل وحدات البايت إلى رقم, يكون التحويل واضح مما يعني أنه يجب استخدام تحويل (cast) كما هو موضح في الأسلوب Main.

struct Digit
{
    byte value;

    public Digit(byte value)  //constructor
    {
        if (value > 9)
        {
            throw new System.ArgumentException();
        }
        this.value = value;
    }

    public static explicit operator Digit(byte b)  // explicit byte to digit conversion operator
    {
        Digit d = new Digit(b);  // explicit conversion

        System.Console.WriteLine("Conversion occurred.");
        return d;
    }
}

class TestExplicitConversion
{
    static void Main()
    {
        try
        {
            byte b = 3;
            Digit d = (Digit)b;  // explicit conversion
        }
        catch (System.Exception e)
        {
            System.Console.WriteLine("{0} Exception caught.", e);
        }
    }
}
// Output: Conversion occurred.

يوضح هذا المثال عامل تشغيل تحويل ضمني عن طريق تعريف عامل تحويل يقوم بالتراجع عما قام به المثال السابق: يحول هذا العامل من نوع Digit إلى نوع قيمة باسم Byte. لأنه يمكن تحويل أي رقم إلى Byte، لا داعي إلى إجبار المستخدمين بأن يكونوا واضحين حول التحويل.

struct Digit
{
    byte value;

    public Digit(byte value)  //constructor
    {
        if (value > 9)
        {
            throw new System.ArgumentException();
        }
        this.value = value;
    }

    public static implicit operator byte(Digit d)  // implicit digit to byte conversion operator
    {
        System.Console.WriteLine("conversion occurred");
        return d.value;  // implicit conversion
    }
}

class TestImplicitConversion
{
    static void Main()
    {
        Digit d = new Digit(3);
        byte b = d;  // implicit conversion -- no cast needed
    }
}
// Output: Conversion occurred.

راجع أيضًا:

المرجع

عوامل تشغيل التحويل (دليل البرمجة لـ #C)

المبادئ

دليل البرمجة لـ #C

موارد أخرى

مرجع C#‎