بسم الله الرحمن الرحيم
وصلى الله على محمد وآله الطاهرين
السلام عليكم ورحمة الله وبركاته
وصلى الله على محمد وآله الطاهرين
السلام عليكم ورحمة الله وبركاته
dynamic : كلمة مفتاحيه جديدة في ال.NET 4 وهي من نوع static (static type) ,حيث يمكن أن تسند اليه أي نوع من البيانات ويتحقق من نوع البيانات اثناء وقت التنفيذ (at run time) وليس اثناء وقت الترجمة (Compilation) لذا يمكن اعتباره كوسيط للبيانات الغير معروفة (لو صح التعبير) لحين وقت التنفيذ (أي يتعرف على نوع البيانات وقت التنفيذ).
الفائدة:
- يغنيك عن الOverloading. (سنبين ذلك بمثال ان شاء الله)
- يمكن أن تسند اليه أي نوع من البيانات (لأنه سيأخذ نوع القيمة المسندة إليه ,لو كان المسند إليه نص فسيكون نوع الdynamic نص)
- يمكن أن تسند الى أي نوع من البيانات حسب المسند إليه. (لو كان المسند الى الdynamic نص فلا يجوز اسناده الى متغير رقمي)
- يمكن أن تسند اليه و تسند الى الخصائص (set, get).
- يدعم عمليات الجمع والقسمة والضرب و الزيادة والنقصان (++, - -).
ويكمن عيب الdynamic في أنه لا يفحص المسند اليه إلا وقت التنفيذ وهذا سيولد استثناءا اثناء التنفيذ اذا حدث خطأ ما في الاسناد.
الان سنعطي مثال لكل فائدة للdynamic وايضا مثال يبين عيب الdynamic
اولا: سنعمل مثال يبين الفرق بين الOverLoad واستخدام الdynamic بدلا من الOverLoad
على سبيل المثال سننشئ دالتين بنفس الاسم لجمع عددين الدالة الاولى لجمع عددين من نوع int والدالة الثانية لجمع عددين من نوع float وكيفية استدعائهما في البرنامج لبيان الOverLoad:
PHP كود :
private int Add(int num1,int num2)
{
return (num1 + num2);
}
private float Add(float num1,float num2)
{
return (num1 + num2);
}
والاستدعاء يكون بهذا الشكل:
PHP كود :
int a = Add(2, 4);
float f = Add(3.4f, 4.4f);
الان انظر الى هذه الدالة التي تؤدي نفس الغرض ولكن بدون تعريفها مرتين وانظر الى كيفية استدعائها ولا حظ الفرق بنفسك:
PHP كود :
private dynamic Add2Num(dynamic num1,dynamic num2)
{
return (num1 + num2);
}
الاستدعاء:
PHP كود :
int res = Add2Num(3, 4);
float fres = Add2Num(4.5f, 5.5f);
double dres = Add2Num(4.5, 3.3);
string sres = Add2Num("dd", " fff");
object ob = Add2Num(3, " g");
كما تلاحظون أنه يمكننا أن نمرر للدالة أي نوع من البيانات نريد ونستدعيها في أكثر من مرة.
ثانيا : الاسناد إليه
مثال:
PHP كود :
dynamic myint = 10; // int type System.Int32
dynamic myfloat = 12f; // float type System.Single
dynamic mydouble = 3.4; //double type System.Double
dynamic mystring = "string"; //string type System.String
MessageBox.Show(mydouble.GetType() + ""); // System.Double
MessageBox.Show(mystring); // System.String
ثالثا: الاسناد منه الى
مثال:
PHP كود :
dynamic myint = 10;
int m = myint; // this will compile and execute
رابعا:
مثال:
PHP كود :
public int id
{
set;
get;
}
الاستدعاء:
PHP كود :
this.id = 3;
dynamic myid = this.id;
خامسا : العمليات
مثال:
PHP كود :
dynamic num1, num2;
num1 = 21;
num2 = 20;
dynamic nres = num1 % num2;
MessageBox.Show(nres.ToString());
num1++;
MessageBox.Show(num1.ToString());
num1--;
MessageBox.Show(num1.ToString());
الان بقي لنا ان نبين عيب هذه الكلمة المفتاحية:
مثال:
PHP كود :
dynamic mystring = "string";
int m = mystring; // This will compile but you get an exception at run time
هذا السطر سيمرر بدون خطأ ولكن سيحدث اسثتناء اثناء التنفيذ .
هذا والحمد لله والصلاة والسلام على اشرف الخلق محمد وآله الطاهرين وأسألكم الدعاء لي ولوالدي
والسلام عليكم ورحمة اللله وبركاته