0Pricing
C# Academy · درس

أنواع المراجع القابلة للقيمة null (للتوعية) والتعليقات التوضيحية (أنماط C# 6)

لا يدعم C# 6 أنواع المراجع القابلة للقيمة null ‏(string?). تعلّم التعامل الآمن مع null: حواجز التحقق من الإدخال، والتوثيق الواضح، والمساعد Require.NotNull، مع المقارنة بـ Nullable لأنواع القيم.

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

الوعي بأنواع المراجع القابلة لـ null والبديل

الفكرة: تضيف أنواع المراجع القابلة لـ null (مثل string?) عمليات تحقق من المترجم في إصدارات C# الأحدث.

  • لا يدعم C# 6 string?
  • استخدم الحواجز والتوثيق الواضح والمساعدات البسيطة
  • أعد قيمة غير null افتراضيًا

الحماية من قيم null

أضف حواجز ArgumentNullException لمعلمات أنواع المراجع؛ ثم تعامل مع القيم على أنها غير null.

using System;

public static class Greeter
{
  // Contract: name must not be null (C# 6 has no string? to enforce)
  public static string Hello(string name)
  {
    if (name == null) throw new ArgumentNullException("name"); // guard
    return "Hello " + name.ToUpper(); // safe after guard
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Greeter.Hello("Ada"));
    try
    {
      Console.WriteLine(Greeter.Hello(null)); // will throw (by design)
    }
    catch (Exception ex)
    {
      Console.WriteLine("Caught: " + ex.GetType().Name);
    }
  }
}

المساعد Require.NotNull

أنشئ مساعدًا صغيرًا باسم Require.NotNull لتقليل التعليمات المتكررة وتوضيح القصد.

using System;

public static class Require
{
  // Works for reference types; returns the validated value
  public static T NotNull<T>(T value, string name) where T : class
  {
    if (value == null) throw new ArgumentNullException(name);
    return value;
  }
}

public sealed class Email
{
  public string Address { get; private set; }

  public Email(string address)
  {
    Address = Require.NotNull(address, "address").Trim();
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Email e = new Email("user@mail.com");
    Console.WriteLine(e.Address);
  }
}

Nullable<T> مقابل المراجع

يُستخدم Nullable<T> (مثل int?) مع أنواع القيم. يمكن أن تكون أنواع المراجع null بالفعل؛ ونستخدم الحواجز في C# 6.

using System;

public class Program
{
  public static void Main(string[] args)
  {
    int x = 5;              // value type (non-nullable)
    int? maybe = null;      // Nullable<T> works for value types
    Console.WriteLine("x=" + x);
    Console.WriteLine("maybe has value? " + maybe.HasValue);
    Console.WriteLine("maybe or default: " + (maybe ?? -1));
  }
}

توثيق عقود null

حدّد قابلية null في توثيق XML وكن متسقًا: فإما أن تكون القيم دائمًا غير null أو توثّق بوضوح الحالات التي يمكن أن تكون فيها null.

using System;

/// <summary>
/// Parses "key=value" and returns the value part.
/// Returns null if the format is invalid.
/// </summary>
public static class Parser
{
  // Explicitly document when null can be returned.
  public static string TryGetValue(string line)
  {
    if (line == null) throw new ArgumentNullException("line");
    int idx = line.IndexOf("=");
    if (idx < 0 || idx == line.Length - 1) return null; // documented nullable return
    return line.Substring(idx + 1);
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine(Parser.TryGetValue("a=1"));
    Console.WriteLine(Parser.TryGetValue("oops")); // prints nothing (null)
  }
}

قائمة التحقق من أمان null في C# 6

قائمة التحقق:

  • تحقق من المدخلات باستخدام ArgumentNullException.
  • أعد قيمًا غير null افتراضيًا؛ ووثّق أي قيم مُرجعة قابلة لـ null.
  • استخدم مساعدات صغيرة مثل (Require.NotNull) للحفاظ على ترتيب الكود.
  • فضّل التحميلات الزائدة التي تتجنب null (مثل استخدام سلسلة فارغة بدلًا من null) عندما يكون ذلك مناسبًا.

أمان null في C# 6

تحقق سريع: في C# 6 (من دون أنواع مراجع قابلة لـ null)، ما الممارسة الجيدة لتقليل الأخطاء المرتبطة بـ null في واجهات API العامة؟

مراجعة

مراجعة: تُعد NRTs ميزة أحدث. في C# 6، حافظ على الأمان باستخدام الحواجز والتوثيق الواضح والأساليب المساعدة وعقود الإرجاع المتوقعة التي لا تعيد null.

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

هل درس «أنواع المراجع القابلة للقيمة null (للتوعية) والتعليقات التوضيحية (أنماط C# 6)» مجاني؟

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

ماذا ستتعلم في «أنواع المراجع القابلة للقيمة null (للتوعية) والتعليقات التوضيحية (أنماط C# 6)»؟

لا يدعم C# 6 أنواع المراجع القابلة للقيمة null ‏(string?). تعلّم التعامل الآمن مع null: حواجز التحقق من الإدخال، والتوثيق الواضح، والمساعد Require.NotNull، مع المقارنة بـ Nullable لأنواع القيم. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «أنواع المراجع القابلة للقيمة null (للتوعية) والتعليقات التوضيحية (أنماط C# 6)»؟

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

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

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

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

  1. الأساليب والأنواع العامة؛ القيود
  2. التغاير (in/out) مع الواجهات والمفوضات
  3. أنواع المراجع القابلة للقيمة null (للتوعية) والتعليقات التوضيحية (أنماط C# 6)
← العودة إلى C# Academy