عامل التشغيل new (مرجع #C)

يستخدم لإنشاء الكائنات ثم استدعاء الدوال الإنشائية. فعلى سبيل المثال:

Class1 obj  = new Class1();

كما يستخدم لإنشاء مثيلات لأنواع مجهولة:

var query = from cust in customers
            select new {Name = cust.Name, Address = cust.PrimaryAddress};

يستخدم عامل التشغيل new أيضاً لاستدعاء الدوال الإنشائية الافتراضية لأنواع القيم. فعلى سبيل المثال:

int i = new int();

في العبارة السابقة تم تهيئة i بـ 0 وهي القيمة الافتراضية للنوع int. للعبارة نفس تأثير ما يلي:

int i = 0;

للحصول على قائمة كاملة من القيم الافتراضية، راجع جدول القيم الافتراضية ( مرجع C# ).

تذكر أنه من الخطأ تصريح دالة إنشائية افتراضية للبنية لأنه ضمنياً لكل نوع قيمة دالة إنشائية افتراضية عامة. من الممكن تصريح دوال إنشائية ذات معلمات لنوع لبنية لتعيين القيم الأولية الخاصة بها ولكن يعد هذا ضرورياً فقط إذا كانت القيم المطلوبة غير القيم الافتراضية.

يتم إنشاء الكائنات من نوع قيمة مثل البنيات في المكدس، بينما يتم إنشاء الكائنات من نوع مرجع مثل الفئات في كومة الذاكرة المؤقتة. يتم إتلاف كلا النوعين من الكائنات تلقائياً، ولكن يتم إتلاف الكائنات من نوع قيمة عندما تخرج خارج النطاق, بينما يتم إتلاف الكائنات من نوع مرجع في وقت غير محدد بعد إزالة أخر مرجع لها. للأنواع من نوع مرجع التي تستهلك موارد مثل قدر كبير من الذاكرة أو مؤشرات الملفات أو شبكات الاتصالات من الأفضل أحياناً تطبيق الإنهاء للتأكد من إتلاف الكائن في أسرع وقت ممكن. لمزيد من المعلومات، راجع عبارة using (مرجع #C).

لا يمكن التحميل الزائد لعامل التشغيل new.

إذا فشل عامل التشغيل new في تخصيص الذاكرة المطلوبة, فإنه يلقي‏‏ استثناء OutOfMemoryException.

مثال

في المثال التالي تم إنشاء كائن struct وكائن فئة وتم تهيئتهما باستخدام عامل التشغيل new ثم تم تعيين قيم لهما. يتم عرض القيم الافتراضية والقيم المعينة.

struct SampleStruct
{
   public int x;
   public int y;

   public SampleStruct(int x, int y)
   {
      this.x = x;
      this.y = y;
   }
}

class SampleClass
{
   public string name;
   public int id;

   public SampleClass() {}

   public SampleClass(int id, string name)
   {
      this.id = id;
      this.name = name;
   }
}

class ProgramClass
{
   static void Main()
   {
      // Create objects using default constructors:
      SampleStruct Location1 = new SampleStruct();
      SampleClass Employee1 = new SampleClass();

      // Display values:
      Console.WriteLine("Default values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location1.x, Location1.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee1.name, Employee1.id);

      // Create objects using parameterized constructors:
      SampleStruct Location2 = new SampleStruct(10, 20);
      SampleClass Employee2 = new SampleClass(1234, "Cristina Potra");

      // Display values:
      Console.WriteLine("Assigned values:");
      Console.WriteLine("   Struct members: {0}, {1}",
             Location2.x, Location2.y);
      Console.WriteLine("   Class members: {0}, {1}",
             Employee2.name, Employee2.id);
   }
}
/*
Output:
Default values:
   Struct members: 0, 0
   Class members: , 0
Assigned values:
   Struct members: 10, 20
   Class members: Cristina Potra, 1234
*/

لاحظ في المثال أن القيمة الافتراضية للسلسلة النصية هي null. ولذلك، فهي لا تُعرض.

مواصفات لغة #C

لمزيد من المعلومات، راجع مواصفات لغة #C. مواصفات اللغة هي المصدر النهائي لبناء جملة C# واستخدامها.

راجع أيضًا:

المرجع

الكلمات الأساسية لـ #C

الكلمات الأساسية لعوامل التشغيل (مرجع #C)

new (مرجع #C)

الأنواع المجهولة (ارشادات برمجة C#)

المبادئ

دليل البرمجة لـ #C

موارد أخرى

مرجع C#‎