1.動的ExpandoObject
js に詳しい友人は、js が次のように記述できることを知っています。
ソースプリントを表示?1 var t = new Object();
2 t.Abc = '何か';
3t.値 = 243;
変数が ExpandoObject 型として宣言されていれば、js 動的言語のこの機能を C# でも使用できるようになりました。例えば:
ソースプリントを表示?1 static void Main(string[] args)
2 {
3 動的 t = new ExpandoObject();
4 t.Abc = "abc";
5t.値 = 10000;
6 Console.WriteLine("t の abc = {0},t の値 = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
このアプリケーションをサポートするために、新しい名前空間 System.Dynamic が C# 4.0 に追加されました。これは、C# の動的言語への移行の試みでもあります。
2.一般的な自動変換
C# 4.0 より前では、次のコードはコンパイルできませんでした。
view sourceprint?1 IEnumerable<object> objs = new List<string> {
2 「私は0です」、「私は1です」、「私は2です」
3};
ただし、C# 4.0 では、この種の宣言は許可されていますが、ジェネリック型の同様のメソッドは許可されていません。次のコードにはコンパイル エラーが発生します。
view sourceprint?1 List<object> objList = new List<string> {
2 「わたしは0」、「わたしは1」、「わたしは2」
3};
3.メソッドパラメータのオプションパラメータは次のとおりです。 メソッド宣言の構文
view sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "デフォルト Arg1", string arg2 = "デフォルト arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
このメソッドには 3 つのパラメータがあり、1 つ目は必須パラメータ、2 つ目と 3 つ目はオプションのパラメータで、すべてデフォルト値があります。この形式は、固定パラメータを持ついくつかのメソッド オーバーロードに役立ちます。
次のように呼び出されます。
ソースプリントを表示?1 static void Main(string[] args)
2 {
3 何かをする(1);
4 DoSomething(1, "ひょうたん");
5 DoSomething(1, "ひょうたん", "きゅうり");
6 Console.ReadLine();
7}
おそらく、パラメーターを選択せずに、オプションのパラメーター メソッドと同じメソッド シグネチャを持つメソッドがある場合、C# はそれをどのように処理するのかと思うかもしれません。次のコードを見てみましょう。
view sourceprint?1 static void DoSomething(int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
別の DoSomething メソッドをオーバーロードしました。このメソッドには 2 つのパラメーターがありますが、実験により呼び出しが証明されています。
DoSomething(1,"arg") の場合、オプションのパラメーターのないメソッドが最初に実行されます。
4.メソッドパラメータの名前付きパラメータ 名前付きパラメータを使用すると、メソッドを呼び出すときにパラメータ名を指定してパラメータ値を割り当てることができます。この場合、パラメータの順序は無視できます。次のメソッド宣言:
view sourceprint?1 static void DoSomething(int height, int width, string openerName, stringscroll) {
2 Console.WriteLine("高さ = {0},幅 = {1},オープナー名 = {2}, スクロール = {3}",高さ,幅,オープナー名,スクロール);
3}
上記で宣言したメソッドを次のように呼び出すことができます
ソースプリントを表示?1 static void Main(string[] args)
2 {
3 DoSomething( スクロール : "いいえ"、高さ : 10、幅 : 5、オープナー名 : "ウィンドウ名");
4 Console.ReadLine();
5}
これは明らかに糖衣構文ですが、メソッド パラメーターが多数ある場合には意味があり、コードの可読性を向上させることができます。
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html