1. DynamicExpandoObject
يعرف الأصدقاء الذين هم على دراية بـ js أنه يمكن كتابة js على النحو التالي:
عرض المصدر؟1 var t = new Object();
2 t.Abc = 'شيء';
3t.القيمة = 243؛
الآن يمكننا أيضًا استخدام هذه الميزة للغة الديناميكية js في c#، بشرط أن يتم تعريف المتغير كنوع ExpandoObject. على سبيل المثال:
عرض المصدر؟1 فراغ ثابت رئيسي (سلسلة [] وسيطات)
2 {
3 ديناميكية t = new ExpandoObject();
4 t.Abc = "abc";
5t.القيمة = 10000؛
6 Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
تمت إضافة مساحة اسم جديدة System.Dynamic في الإصدار C# 4.0 لدعم هذا التطبيق. ولست متأكدًا من أهمية هذا الاستخدام، كما أنها بمثابة تجربة لانتقال لغة C# إلى لغة ديناميكية.
2. التحويل التلقائي العام
قبل C# 4.0، لم يكن من الممكن ترجمة التعليمات البرمجية التالية.
عرض المصدر؟1 IEnumerable
2 "أنا 0"، "أنا 1"، "أنا 2"
3}؛
ومع ذلك، في C# 4.0، يُسمح بهذا النوع من التصريحات، ولكنه يقتصر على الواجهات العامة. غير مسموح باستخدام أساليب مماثلة للأنواع العامة. يحتوي التعليمة البرمجية التالية على خطأ في الترجمة.
عرض المصدر؟1 List
2 "أنا 0"، "أنا 1"، "أنا 2"
3}؛
3. المعلمات الاختيارية لمعلمات الطريقة هي كما يلي: بناء جملة إعلان الطريقة
عرض المصدر؟1 static void DoSomething(int notOptionalArg,string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
تحتوي هذه الطريقة على ثلاث معلمات، الأول هو معلمة مطلوبة، والثاني والثالث معلمات اختيارية، وجميعها لها قيمة افتراضية. يعد هذا النموذج مفيدًا للعديد من عمليات التحميل الزائد للطرق ذات المعلمات الثابتة.
ودعا على النحو التالي:
عرض المصدر؟1 فراغ ثابت رئيسي (سلسلة [] وسيطات)
2 {
3 افعل شيئا(1);
4 DoSomething(1, "قرعة");
5 DoSomething(1, "Gourd", "Cucumber");
6 Console.ReadLine();
7}
ربما ستفكر، إذا كان لدي طريقة بنفس توقيع الطريقة كطريقة معلمة اختيارية دون تحديد معلمة، فكيف ستتعامل معها C#؟
عرض المصدر؟ 1 فراغ ثابت DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}"، arg);
4}
لقد قمت بتحميل طريقة DoSomething أخرى بشكل زائد. تحتوي هذه الطريقة على معلمتين، لكن لم تثبت التجارب أن الاتصال
عند تنفيذ DoSomething(1,"arg")، سيتم تنفيذ الأساليب التي لا تحتوي على معلمات اختيارية أولاً.
4. المعلمات المسماة لمعلمات الطريقة تسمح لنا المعلمات المسماة بتعيين قيم المعلمات عن طريق تحديد أسماء المعلمات عند استدعاء الطريقة، وفي هذه الحالة، يمكن تجاهل ترتيب المعلمات. إعلان الطريقة التالية:
عرض المصدر؟ 1 فراغ ثابت DoSomething(ارتفاع كثافة العمليات، عرض كثافة العمليات، اسم فتاحة السلسلة، تمرير السلسلة) {
2 Console.WriteLine("height = {0},width = {1},openerName = {2},scroll = {3}",height,width,openerName,scroll);
3}
يمكننا استدعاء الطريقة المعلنة أعلاه مثل هذا
عرض المصدر؟1 فراغ ثابت رئيسي (سلسلة [] وسيطات)
2 {
3 DoSomething(scroll: "no"،height: 10, width: 5, openerName : "windowname");
4 Console.ReadLine();
5}
من الواضح أن هذا عبارة عن سكر نحوي، ولكنه يكون منطقيًا عندما يكون هناك العديد من معلمات الطريقة ويمكن أن يزيد من سهولة قراءة الكود.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-Optional-argument.html