1. ไดนามิกExpandoObject
เพื่อนที่คุ้นเคยกับ js จะรู้ว่า js สามารถเขียนได้ดังนี้:
ดู sourceprint?1 var t = วัตถุใหม่ ();
2 t.Abc = 'บางสิ่งบางอย่าง';
3t.มูลค่า = 243;
ตอนนี้เรายังสามารถใช้ฟีเจอร์นี้ของภาษาไดนามิก js ใน c# ได้ โดยมีเงื่อนไขว่าตัวแปรจะถูกประกาศเป็นประเภท ExpandoObject ตัวอย่างเช่น:
ดู sourceprint?1 โมฆะคงที่หลัก (สตริง [] args)
2 {
3 ไดนามิก t = ExpandoObject ใหม่ ();
4 t.Abc = "abc";
5t.มูลค่า = 10,000;
6 Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
7 คอนโซล ReadLine();
8}
มีการเพิ่มเนมสเปซใหม่ System.Dynamic ใน C# 4.0 เพื่อรองรับแอปพลิเคชันนี้ ฉันไม่แน่ใจว่าการใช้งานนี้มีความสำคัญอย่างไร นอกจากนี้ยังเป็นการทดลองใช้การเปลี่ยนภาษา C# เป็นภาษาแบบไดนามิกด้วย
2. การแปลงอัตโนมัติทั่วไป
ก่อน C# 4.0 ไม่สามารถคอมไพล์โค้ดต่อไปนี้ได้
ดู sourceprint?1 IEnumerable<object> objs = รายการใหม่<string> {
2 "ฉัน 0", "ฉัน 1", "ฉัน 2"
3};
อย่างไรก็ตาม ใน C# 4.0 อนุญาตให้ใช้การประกาศประเภทนี้ได้ แต่ไม่อนุญาตให้ใช้วิธีที่คล้ายกันสำหรับประเภททั่วไป โค้ดต่อไปนี้มีข้อผิดพลาดในการคอมไพล์
ดู sourceprint?1 รายการ <วัตถุ> objList = รายการใหม่ <string> {
2 "ฉัน 0", "ฉัน 1", "ฉัน 2"
3};
3. พารามิเตอร์ทางเลือกของพารามิเตอร์วิธีการมีดังนี้: ไวยากรณ์ของการประกาศวิธีการ
ดู sourceprint? 1 โมฆะคงที่ทำอะไรบางอย่าง (int notOptionalArg, string arg1 = "default Arg1", string arg2 = "default arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
วิธีนี้มีพารามิเตอร์สามตัว พารามิเตอร์แรกคือพารามิเตอร์ที่จำเป็น พารามิเตอร์ตัวที่สองและสามเป็นพารามิเตอร์ทางเลือก และพารามิเตอร์ทั้งหมดมีค่าเริ่มต้น แบบฟอร์มนี้มีประโยชน์สำหรับการโอเวอร์โหลดวิธีการหลายวิธีด้วยพารามิเตอร์คงที่
เรียกว่าดังนี้:
ดู sourceprint?1 โมฆะคงที่หลัก (สตริง [] args)
2 {
3 ทำอะไรสักอย่าง(1);
4 ทำอะไรบางอย่าง (1, "น้ำเต้า");
5 ทำอะไรสักอย่าง(1, "น้ำเต้า", "แตงกวา");
6 คอนโซล ReadLine();
7}
บางทีคุณอาจคิดว่าถ้าฉันมีเมธอดที่มีลายเซ็นเมธอดเดียวกับเมธอดพารามิเตอร์เสริมโดยไม่เลือกพารามิเตอร์ แล้ว C# จะจัดการมันอย่างไร มาดูโค้ดต่อไปนี้กัน
ดู sourceprint? 1 โมฆะคงที่ DoSomething (int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", หาเรื่อง);
4}
ฉันโหลดวิธี DoSomething อื่นมากเกินไป วิธีนี้มีพารามิเตอร์สองตัว แต่ไม่มีพารามิเตอร์ทางเลือกใดที่พิสูจน์ได้ว่ามีการเรียกใช้
เมื่อ DoSomething(1,"arg") วิธีการที่ไม่มีพารามิเตอร์ทางเลือกจะถูกดำเนินการก่อน
4. พารามิเตอร์ที่มีชื่อของพารามิเตอร์วิธีการ พารามิเตอร์ที่มีชื่อช่วยให้เราสามารถกำหนดค่าพารามิเตอร์โดยการระบุชื่อพารามิเตอร์เมื่อเรียกใช้วิธีการ ในกรณีนี้ ลำดับของพารามิเตอร์สามารถละเว้นได้ การประกาศวิธีการต่อไปนี้:
ดู sourceprint? 1 โมฆะคงที่ทำอะไรบางอย่าง (ความสูง int, ความกว้าง int, ชื่อที่เปิดสตริง, การเลื่อนสตริง) {
2 Console.WriteLine("height = {0},width = {1},openerName = {2}, scroll = {3}",height,width,openerName,scroll);
3}
เราสามารถเรียกเมธอดที่ประกาศไว้ข้างต้นได้ดังนี้
ดู sourceprint?1 โมฆะคงที่หลัก (สตริง [] args)
2 {
3 ทำอะไรสักอย่าง( เลื่อน : "ไม่", ความสูง : 10, ความกว้าง : 5, openerName : "ชื่อหน้าต่าง");
4 คอนโซล ReadLine();
5}
แน่นอนว่านี่คือน้ำตาลเชิงวากยสัมพันธ์ แต่ก็สมเหตุสมผลเมื่อมีพารามิเตอร์วิธีการมากมายและสามารถเพิ่มความสามารถในการอ่านโค้ดได้
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-Option-argument.html