خاصية Type Casting (تحويل الأنواع) في لغة C#

خاصية Type Casting في لغة C#، والمعروفة أيضًا باسم "تحويل الأنواع"، هي عملية تحويل قيمة من نوع بيانات إلى نوع بيانات آخر. تُستخدم هذه الخاصية بشكل شائع عندما تحتاج إلى التعامل مع بيانات من أنواع مختلفة أو عندما تحتاج إلى تمرير بيانات بين مكونات مختلفة من البرنامج تتوقع أنواع بيانات محددة.

أنواع التحويل في C#

هناك نوعان رئيسيان من التحويل في C#:

  1. التحويل الضمني (Implicit Conversion):

    • يحدث تلقائيًا بواسطة المُترجم دون الحاجة إلى تدخل المُبرمج.
    • يتم عندما يكون هناك تحويل "آمن"، أي عندما لا يكون هناك خطر فقدان بيانات. على سبيل المثال، التحويل من int إلى long أو من float إلى double.
    • مثال:
    C#
    int num1 = 10;
    long num2 = num1; // تحويل ضمني من int إلى long
    float num3 = 3.14f;
    double num4 = num3; // تحويل ضمني من float إلى double
  2. التحويل الصريح (Explicit Conversion):

    • يتطلب تدخل المُبرمج باستخدام عامل التحويل (cast operator) أو استخدام طرق تحويل مُحددة.

    • يتم عندما يكون هناك احتمال فقدان بيانات أو عندما يكون التحويل بين أنواع غير متوافقة بشكل مباشر. على سبيل المثال، التحويل من double إلى int (حيث تُفقد الأجزاء العشرية) أو التحويل بين أنواع الكائنات.

    • هناك طريقتان رئيسيتان للتحويل الصريح:

    • باستخدام عامل التحويل (Cast Operator): يتم وضع نوع البيانات المطلوب بين قوسين قبل القيمة المراد تحويلها. مثال:

      C#
      double num5 = 12.75;
      int num6 = (int)num5; // تحويل صريح من double إلى int (يُفقد الجزء العشري)
      Console.WriteLine(num6); // Output: 12

      long num7 = 10000000000;
      int num8 = (int)num7; // تحويل صريح من long إلى int (قد يحدث تجاوز للحدود)
      Console.WriteLine(num8); // Output: -1539622912 (نتيجة بسبب تجاوز الحدود)
    • باستخدام طرق التحويل المُحددة (Conversion Methods): توفر فئة System.Convert طرقًا مُحددة للتحويل بين أنواع البيانات المختلفة، مثل ToInt32(), ToDouble(), ToString(), إلخ. مثال:

      C#
      string str = "123";
      int num9 = Convert.ToInt32(str); // تحويل من string إلى int
      double num10 = Convert.ToDouble("3.14159"); // تحويل من string إلى double

      DateTime date = Convert.ToDateTime("2024-01-14"); // تحويل من string إلى DateTime
      Console.WriteLine(date);

أمثلة إضافية وشائعة

  • تحويل السلاسل النصية إلى أرقام: كما رأينا في المثال السابق، تُستخدم Convert.ToInt32(), Convert.ToDouble(), int.Parse(), double.Parse() لتحويل السلاسل النصية التي تُمثل أرقامًا إلى أنواع أرقام صحيحة أو عشرية. من المهم التعامل مع حالات الخطأ المحتملة باستخدام try-catch عند استخدام Parse، حيث قد تفشل إذا كانت السلسلة النصية لا تُمثل رقمًا صحيحًا.

    C#
    string strNum = "abc";
    try
    {
    int num = int.Parse(strNum);
    }
    catch (FormatException ex)
    {
    Console.WriteLine("خطأ: السلسلة النصية لا تمثل رقمًا صحيحًا.");
    }
  • تحويل أنواع الكائنات (Object Casting): يُستخدم لتحويل كائن من نوع عام (object) إلى نوع مُحدد. يتطلب ذلك التأكد من أن الكائن بالفعل من النوع المطلوب، وإلا سيحدث خطأ InvalidCastException. يُمكن استخدام الكلمتين المفتاحيتين as و is للتحقق من نوع الكائن قبل التحويل.

    C#
    object obj = "Hello";

    // باستخدام as (يعود بقيمة null إذا كان التحويل غير ممكن)
    string str2 = obj as string;
    if (str2 != null)
    {
    Console.WriteLine(str2.ToUpper()); // Output: HELLO
    }

    // باستخدام is (للتحقق من النوع)
    if (obj is string)
    {
    string str3 = (string)obj;
    Console.WriteLine(str3.ToLower()); // Output: hello
    }

اعتبارات مهمة

  • فقدان البيانات: يجب الانتباه إلى احتمال فقدان البيانات عند التحويل بين أنواع مختلفة، خاصةً عند التحويل من نوع ذي دقة أعلى إلى نوع ذي دقة أقل (مثل double إلى int).
  • تجاوز الحدود: عند التحويل بين أنواع الأرقام الصحيحة، يجب الانتباه إلى احتمال تجاوز الحدود (overflow)، أي محاولة تخزين قيمة أكبر من الحد الأقصى أو أقل من الحد الأدنى للنوع المُستهدف.
  • معالجة الأخطاء: من المهم معالجة الأخطاء المحتملة التي قد تحدث أثناء التحويل، مثل FormatException عند تحويل السلاسل النصية إلى أرقام أو InvalidCastException عند تحويل أنواع الكائنات.

باختصار، خاصية Type Casting في C# أداة قوية وضرورية للتعامل مع أنواع البيانات المختلفة. فهم أنواع التحويل المختلفة وكيفية استخدامها بشكل صحيح يُساعد على كتابة برامج قوية وفعالة.