0Pricing
C# Academy · درس

تعبيرات new ذات النوع المستهدف

بسّطوا إنشاء الكائنات باستخدام تحديد النوع المستهدف

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

‏new محدد بالنوع الهدف

منذ C# 9، يمكنك كتابة Type x = new(); وحذف النوع بعد new عندما يكون النوع الهدف معروفًا.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        List<int> numbers = new();
        numbers.Add(1);
        Console.WriteLine(numbers.Count);
    }
}

إزالة التكرار

عندما يوضّح المتغير النوع بالفعل، فإن تكراره بعد new لا يضيف سوى التشويش. ويزيل new() الفارغ هذا التكرار.

using System;
using System.Text;

class Program {
    static void Main() {
        StringBuilder sb = new();
        sb.Append("Hi");
        Console.WriteLine(sb.ToString());
    }
}

تمرير وسيطات المُنشئ

يظل new() المحدد بالنوع الهدف يقبل وسيطات المُنشئ داخل القوسين.

using System;

class Point {
    public int X, Y;
    public Point(int x, int y) { X = x; Y = y; }
}
class Program {
    static void Main() {
        Point p = new(3, 4);
        Console.WriteLine(p.X + ", " + p.Y);
    }
}

مع مهيئات الكائنات

يمكنك دمج new المحدد بالنوع الهدف مع كتلة تهيئة كائن.

using System;

class User {
    public string Name;
    public int Age;
}
class Program {
    static void Main() {
        User u = new() { Name = "Ann", Age = 30 };
        Console.WriteLine(u.Name + " " + u.Age);
    }
}

في الحقول

يعمل new المحدد بالنوع الهدف مع مهيئات الحقول أيضًا، مما يحافظ على إيجاز التصريحات.

using System;
using System.Collections.Generic;

class Program {
    static List<string> items = new();
    static void Main() {
        items.Add("a");
        Console.WriteLine(items.Count);
    }
}

في وسيطات الأساليب

عندما يكون للمعامل نوع معروف، يمكنك تمرير new() مباشرةً كوسيطة.

using System;
using System.Collections.Generic;

class Program {
    static void Print(List<int> list) {
        Console.WriteLine(list.Count);
    }
    static void Main() {
        Print(new());
    }
}

إعادة new()

إذا كان نوع القيمة المعادة من الأسلوب معروفًا، يمكنك إعادة new() دون تكرار اسم النوع.

using System;
using System.Collections.Generic;

class Program {
    static List<int> Make() {
        return new() { 1, 2, 3 };
    }
    static void Main() {
        Console.WriteLine(Make().Count);
    }
}

مقارنته مع var

يحدد var x = new List<int>() النوع في الطرف الأيمن، بينما يحدده List<int> x = new() في الطرف الأيسر. اختر الصيغة الأسهل قراءة.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        var a = new List<int>();
        List<int> b = new();
        Console.WriteLine(a.Count + b.Count);
    }
}

الغموض خطأ

إذا لم يتمكن المترجم من تحديد النوع الهدف، يفشل new(). ويجب أن يكون الهدف واضحًا من السياق.

using System;

class Program {
    static void Main() {
        object o = new object();
        Console.WriteLine(o.GetType().Name);
    }
}

قابلية القراءة مع الأنواع الطويلة

يكون new المحدد بالنوع الهدف مفيدًا خصوصًا مع الأنواع العامة المطولة، إذ يتجنب كتابة النوع مرتين.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        Dictionary<string, List<int>> map = new();
        map["a"] = new() { 1, 2 };
        Console.WriteLine(map["a"].Count);
    }
}

أسلوب عصري

يحافظ new المحدد بالنوع الهدف على نظافة التصريحات، مع الإبقاء على تحديد الأنواع الثابت بالكامل وفحوصات المترجم.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        Queue<string> q = new();
        q.Enqueue("first");
        Console.WriteLine(q.Dequeue());
    }
}

تحقق سريع

اختبر مدى فهمك لتعبيرات new المحددة بالنوع الهدف.

مراجعة

يتيح new() المحدد بالنوع الهدف حذف النوع بعد new عندما يكون النوع الهدف معروفًا مسبقًا، مما يقلل التكرار في التصريحات والحقول والوسائط والقيم المعادة.

ويظل يقبل وسيطات المُنشئ والمهيئات، ويفشل عندما يكون النوع غامضًا، كما يكمل var بوصفه أسلوبًا عصريًا وآمنًا تمامًا من ناحية النوع.

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

هل درس «تعبيرات new ذات النوع المستهدف» مجاني؟

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

ماذا ستتعلم في «تعبيرات new ذات النوع المستهدف»؟

بسّطوا إنشاء الكائنات باستخدام تحديد النوع المستهدف تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

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

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

كم من الوقت يستغرق درس «تعبيرات new ذات النوع المستهدف»؟

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

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

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

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

  1. استنتاج نوع المتغير المحلي باستخدام var
  2. متى تتجنبون var
  3. النوع dynamic
  4. تعبيرات new ذات النوع المستهدف
← العودة إلى C# Academy