1. dinamisExpandoObject
Teman-teman yang familiar dengan js pasti tahu kalau js bisa ditulis seperti ini:
lihat sourceprint?1 var t = Objek baru();
2 t.Abc = 'sesuatu';
3t.Nilai = 243;
Sekarang kita juga dapat menggunakan fitur bahasa dinamis js ini di c#, asalkan variabel dideklarasikan sebagai tipe ExpandoObject. Misalnya:
lihat sourceprint?1 static void Utama(string[] args)
2 {
3 dinamis t = new ExpandoObject();
4 t.Abc = "abc";
5t.Nilai = 10.000;
6 Console.WriteLine("t's abc = {0},t's value = {1}", t.Abc, t.Value);
7 Konsol.ReadLine();
8}
Namespace System.Dynamic baru telah ditambahkan di C# 4.0 untuk mendukung aplikasi ini. Saya tidak yakin apa pentingnya penggunaan ini. Ini juga merupakan uji coba transisi C# ke bahasa dinamis.
2. Konversi otomatis generik
Sebelum C# 4.0, kode berikut tidak dapat dikompilasi.
lihat sourceprint?1 IEnumerable
2 "Aku 0", "Aku 1", "Aku 2"
3};
Namun, di C# 4.0, deklarasi semacam ini diperbolehkan, tetapi terbatas pada antarmuka generik. Metode serupa untuk tipe generik tidak diperbolehkan.
lihat sourceprint?1 Daftar
2 "Saya 0", "Saya 1", "Saya 2"
3};
3. Parameter opsional parameter metode adalah sebagai berikut: sintaks deklarasi metode
lihat sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "Arg1 default", string arg2 = "arg2 default") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Metode ini memiliki tiga parameter. Parameter pertama adalah parameter wajib, parameter kedua dan ketiga adalah parameter opsional, dan semuanya memiliki nilai default. Formulir ini berguna untuk beberapa metode yang kelebihan beban dengan parameter tetap.
Disebut sebagai berikut:
lihat sourceprint?1 static void Utama(string[] args)
2 {
3 Lakukan Sesuatu(1);
4 Lakukan Sesuatu(1, "Labu");
5 Lakukan Sesuatu(1, "Labu", "Mentimun");
6 Konsol.ReadLine();
7}
Mungkin Anda akan berpikir, jika saya memiliki metode dengan tanda tangan metode yang sama dengan metode parameter opsional tanpa memilih parameter, bagaimana C# menanganinya?
lihat sourceprint?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
Saya membebani metode DoSomething lainnya. Metode ini memiliki dua parameter, tetapi tidak ada parameter opsional yang membuktikan pemanggilan itu
Ketika DoSomething(1,"arg"), metode tanpa parameter opsional akan dieksekusi terlebih dahulu.
4. Parameter bernama dari parameter metode Parameter bernama memungkinkan kita untuk menetapkan nilai parameter dengan menentukan nama parameter saat memanggil metode. Deklarasi metode berikut:
lihat sourceprint?1 static void DoSomething(int tinggi, int lebar, nama pembuka string, gulir string) {
2 Console.WriteLine("tinggi = {0},lebar = {1},namapembuka = {2}, gulir = {3}",tinggi,lebar,namapembuka,gulir);
3}
Kita dapat memanggil metode yang dinyatakan di atas seperti ini
lihat sourceprint?1 static void Utama(string[] args)
2 {
3 Lakukan Sesuatu( gulir : "tidak",tinggi : 10, lebar : 5, Nama Pembuka : "namajendela");
4 Konsol.ReadLine();
5}
Jelas ini adalah gula sintaksis, tetapi masuk akal bila ada banyak parameter metode dan dapat meningkatkan keterbacaan kode.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html