English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#4.0 (.NET 4.5) أدخل نوع جديد يُدعى dynamic، يُتجنب فحص النوع عند التجميع. نوع dynamic يُتجنب فحص النوع عند التجميع؛ بدلاً من ذلك، يُفسر النوع عند التشغيل.
تم تعريف متغيرات النوع الديناميكي باستخدام كلمة المفتاح dynamic.
dynamic MyDynamicVar = 1;
في معظم الحالات، سيقوم المحول بتجميع النوع الديناميكي كنوع كائن. ولكن سيتم تحليل نوع متغير النوع الديناميكي في التشغيل.
dynamic MyDynamicVar = 1; Console.WriteLine(MyDynamicVar.GetType());
System.Int32
سيتم تغيير نوع النوع الديناميكي عند التخصيص بناءً على القيمة المخصصة. يوضح المثال التالي كيفية تغيير متغير الديناميكية بناءً على القيمة المخصصة.
static void Main(string[] args) { dynamic MyDynamicVar = 100; Console.WriteLine("قيمة: {0}, نوع: {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = "Hello World!!"; Console.WriteLine("قيمة: {0}, نوع: {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = true; Console.WriteLine("قيمة: {0}, نوع: {1}", MyDynamicVar, MyDynamicVar.GetType()); MyDynamicVar = DateTime.Now; Console.WriteLine("قيمة: {0}, نوع: {1}", MyDynamicVar, MyDynamicVar.GetType()); }
القيمة: 100، النوع: System.Int32 القيمة: Hello World !!، النوع: System.String القيمة: True، النوع: System.Boolean القيمة: 01-01-2014، النوع: System.DateTime
سيتم تحويل متغيرات النوع الديناميكي تلقائيًا إلى أنواع أخرى.
dynamic d1 = 100; int i = d1; d1 = "Hello"; string greet = d1; d1 = DateTime.Now; DateTime dt = d1;
إذا تم تخصيص كائن فئة لنوع ديناميكي، فإن محول التجميع لن يتحقق من صحة اسم الطريقة والصفات للنوع الديناميكي الذي يحتوي على كائن فئة مخصصة. انظر إلى المثال التالي.
class Program { static void Main(string[] args) { dynamic stud = new Student(); stud.DisplayStudentInfo(1, "Bill"); خطأ في التشغيل، لا يوجد خطأ في التجميع stud.DisplayStudentInfo("1"); خطأ في التشغيل، لا يوجد خطأ في التجميع stud.FakeMethod(); خطأ في التشغيل، لا يوجد خطأ في التجميع } } public class Student { public void DisplayStudentInfo(int id) { } }
في المثال السابق، لا يقوم محرر C# بالتحقق من المعامل، نوع المعامل أو حتى وجوده. يتحقق من هذه الأشياء عند التنفيذ، إذا كانت غير صحيحة، يرفع استثناء في الوقت الفعلي. يرجى ملاحظة أن النوع الديناميكي لا يدعم IntelliSense في Visual Studio. يرجى ملاحظة أن النوع الديناميكي لا يدعم IntelliSense في Visual Studio.
يقدم API للغة الديناميكية DLR بنية الأساس لدعم النوع الديناميكي في C#.