إنشاء أعداد عشوائية مهمة شائعة في البرمجة، وتوفر C# أدوات قوية لتحقيق ذلك. تستعرض هذه المقالة فئة System.Random
، ووظائفها، وأفضل الممارسات لإنشاء أعداد صحيحة عشوائية.
محتويات
- فهم فئة
Random
- إنشاء أعداد صحيحة عشوائية
- بذر مُنشئ الأعداد العشوائية
- أعداد عشوائية آمنة تشفيرياً
- خاتمة
- الأسئلة الشائعة
فهم فئة Random
تُستخدم فئة System.Random
في C# لإنشاء أعداد شبه عشوائية. من المهم تذكر أن هذه الأعداد ليست عشوائية تمامًا؛ بل تُنتج باستخدام خوارزمية حتمية. وهذا يعني أنه بالنظر إلى نفس الحالة الأولية (البذر)، ستكون تسلسل الأعداد متطابقًا. ومع ذلك، بالنسبة للعديد من التطبيقات، فإن العشوائية شبه الكاملة التي توفرها System.Random
كافية.
إنشاء أعداد صحيحة عشوائية
الطريقة الأساسية لإنشاء أعداد صحيحة عشوائية هي Next()
. توفر هذه الطريقة العديد من الإصدارات الزائدة:
Next()
: تُرجع عددًا صحيحًا عشوائيًا غير سالب أقل منint.MaxValue
.Next(maxValue)
: تُرجع عددًا صحيحًا عشوائيًا غير سالب أقل منmaxValue
المحدد (يجب أن يكونmaxValue
موجبًا).Next(minValue, maxValue)
: تُرجع عددًا صحيحًا عشوائيًا ضمن النطاق الشامل [minValue
،maxValue
) (يجب أن يكونmaxValue
أكبر منminValue
).
using System;
public class RandomIntExample
{
public static void Main(string[] args)
{
Random random = new Random();
int randomNumber1 = random.Next(); // 0 to int.MaxValue - 1
Console.WriteLine($"Random number 1: {randomNumber1}");
int randomNumber2 = random.Next(10); // 0 to 9
Console.WriteLine($"Random number 2: {randomNumber2}");
int randomNumber3 = random.Next(10, 21); // 10 to 20
Console.WriteLine($"Random number 3: {randomNumber3}");
}
}
بذر مُنشئ الأعداد العشوائية
قيمة البذر تُهيئ الحالة الداخلية لفئة Random
. استخدام نفس البذر سيُنتج دائمًا نفس تسلسل الأعداد. إذا لم يتم توفير بذر، فسيتم استخدام ساعة النظام، مما يؤدي إلى تسلسل مختلف في كل مرة يتم تشغيل التطبيق فيها. هذا هو الأفضل عمومًا لمعظم التطبيقات.
using System;
public class SeededRandomExample
{
public static void Main(string[] args)
{
Random random1 = new Random(12345);
int number1 = random1.Next(1, 101);
Console.WriteLine($"Random number with seed 12345: {number1}");
Random random2 = new Random(12345);
int number2 = random2.Next(1, 101); // Same as number1
Console.WriteLine($"Random number with seed 12345: {number2}");
Random random3 = new Random(); // Uses system time
int number3 = random3.Next(1, 101); // Different number
Console.WriteLine($"Random number with system time seed: {number3}");
}
}
إن ضبط البذر مفيد للاختبار والسيناريوهات التي تتطلب نتائج قابلة للتكرار.
أعداد عشوائية آمنة تشفيرياً
بالنسبة للتطبيقات التي تتطلب أعدادًا عشوائية آمنة تشفيرياً (مثل التطبيقات الحساسة للأمن)، فإن System.Random
غير كافية. بدلاً من ذلك، استخدم مساحة اسم System.Security.Cryptography
، وتحديدًا فئة RNGCryptoServiceProvider
.
خاتمة
توفر فئة System.Random
طريقة بسيطة وفعالة لإنشاء أعداد صحيحة شبه عشوائية في C#. إن فهم دور البذر والإصدارات الزائدة المختلفة لـ Next()
يُمكّن من إنشاء أعداد عشوائية مرنة ومنظمة. بالنسبة للتطبيقات الحساسة للأمن، اختر دائمًا مُنشئات الأعداد العشوائية الآمنة تشفيرياً.
الأسئلة الشائعة
- س: هل الأعداد عشوائية حقًا؟ ج: لا، إنها شبه عشوائية.
- س: كيف يتم إنشاء أعداد عشوائية ضمن نطاق محدد؟ ج: استخدم
Next(minValue, maxValue)
. - س: لماذا يتم ضبط البذر؟ ج: للحصول على نتائج قابلة للتكرار.
- س: ماذا عن الأعداد العشوائية الآمنة تشفيرياً؟ ج: استخدم
RNGCryptoServiceProvider
. - س: أنواع بيانات أخرى؟ ج: توفر فئة
Random
طرقًا لإنشاء أنواع أخرى (أعداد عشرية، إلخ)، أو يمكنك إجراء تحويلات على نتائج الأعداد الصحيحة.