خاصية Type Casting (تحويل الأنواع) في لغة C#
خاصية Type Casting في لغة C#، والمعروفة أيضًا باسم "تحويل الأنواع"، هي عملية تحويل قيمة من نوع بيانات إلى نوع بيانات آخر. تُستخدم هذه الخاصية بشكل شائع عندما تحتاج إلى التعامل مع بيانات من أنواع مختلفة أو عندما تحتاج إلى تمرير بيانات بين مكونات مختلفة من البرنامج تتوقع أنواع بيانات محددة.
أنواع التحويل في C#
هناك نوعان رئيسيان من التحويل في C#:
-
التحويل الضمني (Implicit Conversion):
- يحدث تلقائيًا بواسطة المُترجم دون الحاجة إلى تدخل المُبرمج.
- يتم عندما يكون هناك تحويل "آمن"، أي عندما لا يكون هناك خطر فقدان بيانات. على سبيل المثال، التحويل من
int
إلىlong
أو منfloat
إلىdouble
. - مثال:
C#int num1 = 10;long num2 = num1; // تحويل ضمني من int إلى longfloat num3 = 3.14f;double num4 = num3; // تحويل ضمني من float إلى double -
التحويل الصريح (Explicit Conversion):
-
يتطلب تدخل المُبرمج باستخدام عامل التحويل (cast operator) أو استخدام طرق تحويل مُحددة.
-
يتم عندما يكون هناك احتمال فقدان بيانات أو عندما يكون التحويل بين أنواع غير متوافقة بشكل مباشر. على سبيل المثال، التحويل من
double
إلىint
(حيث تُفقد الأجزاء العشرية) أو التحويل بين أنواع الكائنات. -
هناك طريقتان رئيسيتان للتحويل الصريح:
-
باستخدام عامل التحويل (Cast Operator): يتم وضع نوع البيانات المطلوب بين قوسين قبل القيمة المراد تحويلها. مثال:
C#double num5 = 12.75;int num6 = (int)num5; // تحويل صريح من double إلى int (يُفقد الجزء العشري)Console.WriteLine(num6); // Output: 12long 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 إلى intdouble num10 = Convert.ToDouble("3.14159"); // تحويل من string إلى doubleDateTime date = Convert.ToDateTime("2024-01-14"); // تحويل من string إلى DateTimeConsole.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# أداة قوية وضرورية للتعامل مع أنواع البيانات المختلفة. فهم أنواع التحويل المختلفة وكيفية استخدامها بشكل صحيح يُساعد على كتابة برامج قوية وفعالة.