0Pricing
C# Academy · درس

unmanaged وnotnull وnew() (محاكاة C# 6)

يدعم C# 6 قيود class وstruct وnew()؛ وحاكِ notnull/unmanaged الأحدث باستخدام الحواجز، وشكل واجهة API، والاتفاقيات.

unmanaged وnotnull وnew() (محاكاة C# 6) درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

خريطة القيود

الهدف: استخدم قيود الأنواع العامة في C# 6 بفاعلية.

  • class مقابل struct
  • new() للإنشاء من دون Activator
  • محاكاة notnull/unmanaged باستخدام فحوصات الحماية وتصميم واجهة برمجة التطبيقات

class مقابل struct

يقصر class النوع T على الأنواع المرجعية، بينما يقصر struct النوع T على أنواع القيم. ويؤدي الاستخدام غير الصحيح إلى فشل وقت الترجمة.

using System;

// Works only for reference types
public static class RefBox
{
  public static string Show<T>(T value) where T : class
  {
    return value == null ? "null ref" : "ref: " + value.ToString();
  }
}

// Works only for value types
public static class ValBox
{
  public static string Show<T>(T value) where T : struct
  {
    return "value: " + value.ToString();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    string s = "hello";
    int n = 42;

    Console.WriteLine(RefBox.Show<string>(s)); // OK
    Console.WriteLine(ValBox.Show<int>(n));    // OK

    // Console.WriteLine(RefBox.Show<int>(n)); // compile-time error (int is struct)
    // Console.WriteLine(ValBox.Show<string>(s)); // compile-time error (string is class)
  }
}

new() عمليًا

يضمن new() وجود منشئ عام بلا معاملات، كي تتمكن الشيفرة العامة من استدعاء new T() مباشرةً.

using System;

// Requires public parameterless ctor on T
public static class Factory
{
  public static T Create<T>() where T : new()
  {
    return new T(); // safe in C# 6 with new()
  }
}

public sealed class Sample
{
  public string Name { get; set; }
  public Sample() { Name = "default"; }
}

public class Program
{
  public static void Main(string[] args)
  {
    Sample x = Factory.Create<Sample>();
    Console.WriteLine("Created: " + x.Name);
  }
}

محاكاة notnull

لا يتوفر notnull في C# 6. ويمكن تقريب سلوكه باستخدام where T : class مع فحوصات null صريحة داخل واجهة برمجة التطبيقات.

using System;

// C# 6 has no notnull constraint. Use where T : class and guard at runtime.
public static class NotNullApi
{
  public static int LengthOf<T>(T x) where T : class
  {
    if (x == null) throw new ArgumentNullException("x");
    return x.ToString().Length; // placeholder usage
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NotNullApi.LengthOf<string>("hi")); // 2
    try
    {
      Console.WriteLine(NotNullApi.LengthOf<string>(null)); // throws
    }
    catch (Exception ex)
    {
      Console.WriteLine("Guard fired: " + ex.GetType().Name);
    }
  }
}

محاكاة هدف unmanaged

لا يتوفر unmanaged في C# 6. ويمكنك استخدام struct والواجهات (مثل IComparable) لاستهداف أنواع القيم الشبيهة بالأنواع الرقمية.

using System;

// No unmanaged constraint in C# 6.
// Use struct for value types and restrict API usage (document numeric-only intent).
public static class NumericOps
{
  public static T Max<T>(T a, T b) where T : struct, IComparable
  {
    // Works for numeric primitives because they implement IComparable
    return (a.CompareTo(b) >= 0) ? a : b;
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(NumericOps.Max<int>(3, 9));     // 9
    Console.WriteLine(NumericOps.Max<double>(2.5, 2)); // 2.5
  }
}

نصائح عملية

نصائح:

  • اختر class/struct لتقييد T مبكرًا.
  • استخدم new() إذا احتجت إلى إنشاء T.
  • حاكِ notnull باستخدام فحوصات وقت التشغيل.
  • حاكِ unmanaged عبر struct مع توثيق الاستخدام (وغالبًا مع الأنواع الأولية الرقمية).

قيد المُنشئ

تحقّق سريع: ما القيد في C# 6 الذي يفرض وجود منشئ عام بلا معاملات على وسيطة النوع؟

مراجعة

مراجعة: استخدم class/struct/new() في C# 6. وحاكِ notnull بفحوصات null، وحاكِ هدف unmanaged باستخدام حدود struct والواجهة.

الأسئلة الشائعة

هل درس «unmanaged وnotnull وnew() (محاكاة C# 6)» مجاني؟

نعم — نص درس «unmanaged وnotnull وnew() (محاكاة C# 6)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.

ماذا ستتعلم في «unmanaged وnotnull وnew() (محاكاة C# 6)»؟

يدعم C# 6 قيود class وstruct وnew()؛ وحاكِ notnull/unmanaged الأحدث باستخدام الحواجز، وشكل واجهة API، والاتفاقيات. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «unmanaged وnotnull وnew() (محاكاة C# 6)»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. unmanaged وnotnull وnew() (محاكاة C# 6)
  2. الرياضيات العامة (نظرة عامة) والسمات العامة (عند الحاجة)
  3. أدوات عامة قابلة لإعادة الاستخدام
← العودة إلى C# Academy