English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي C#

دليل متقدم C#

C# موجه بالأ象

النوع الديناميكي في C#

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#.