C# dynamic 支持动态语言运行时的类(强语言中的弱语言实现方式)

mac2024-03-15  14

在强语言体系中的 弱语言操作方式

缺点 编译时不进行 类型校验

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': '&lt;h3&gt;Title!&lt;/h3&gt;\r\n&lt;p&gt;Content!&lt;/p&gt;' } ]"; 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的正确用法

最新回复(0)