C#dynamicは動的言語実行時のクラス(強い言語での弱い言語実装)をサポートする

9809 ワード

強い言語システムにおける弱い言語操作方式 コンパイル時にタイプチェックを行わない
dynamic str="abc";
int number= str; //           ,              (implicitly Convert)   
  • テクニックjsonのノードクエリー
  • string json = @"[
      {
        'Title': 'Json.NET is awesome!',
        'Author': {
          'Name': 'James Newton-King',
          'Twitter': '@JamesNK',
          'Picture': '/jamesnk.png'
        },
        'Date': '2013-01-23T19:30:00',
        'BodyHtml': '<h3>Title!</h3>\r
    <p>Content!</p>'
    } ]"; dynamic blogPosts = JArray.Parse(json); dynamic blogPost = blogPosts[0]; string title = blogPost.Title; Console.WriteLine(title); // Json.NET is awesome! string author = blogPost.Author.Name; Console.WriteLine(author); // James Newton-King DateTime postDate = blogPost.Date; Console.WriteLine(postDate);
  • 型変換
  • //  dynamic          objec   ,    object       , dynamic           , object   。 
    dynamic nd= 123;
    int val  = nd;//                 
    objetct obj = 123;
    int count = obj; //             ,   Convert.int()            
    
    
    
    dynamic d1 = 7;
    dynamic d2 = "a string";
    dynamic d3 = System.DateTime.Today;
    dynamic d4 = System.Diagnostics.Process.GetProcesses();
    int i = d1;
    string str = d2;
    DateTime dt = d3;
    System.Diagnostics.Process[] procs = d4;
    
    // dynamic    Dictionary
    dynamic data = new Person();
    IDictionary<string,object> dic =data as IDictionary<string,object>;
     
    // Dictionary      dynamic 
    for(KeyValuePair<string,object> item in dic)
    {
          ((IDictionary<string,object> )data).add(item.key,item.value);
    }
    
  • 簡略化反射
  • //dynamic    
     dynamic p = Activator.CreateInstance(typeof(person));
     p.talk("muse");
    
    
     //  
     var p1 = new person();
     var takdMethod = typeof(person).GetMethod("talk");
     takdMethod.Invoke(p1,new object[] { "kitty"});
    
    

    dynamicキーワードと利点と劣勢、タイプ変換、Dictionary間の変換を参照dynamicの正しい使い方を参照