c# 一些细节 之动态对象和匿名对象
2016-04-05 22:39
344 查看
1.动态对象和匿名对象
偶然看到一个语法,觉得特别方便然后频繁使用,但是没有深究,直到今天忽然发现我潜意思中对它的认知居然是错误的.
var data=new { State=1,Message="ok!" };
我一直以为这是动态类型对象,因为前面用了var
知道今天我看到了ViewBag.StatusMessage 这时突然一下子发现(其实之前有关门看到ViewData做比较的文章,但一直没想起来这货),
这种语法和JavaScript的类型是一样的,于是我F12了一把:"public dynamic ViewBag { get; }"
ViewBag 是动态类型dynamic,那var
data是什么类型呢?
然后我尝试这样写
var data=new { };
data.State=1;
编译错误不包含State定义....so我瞬间,醒悟这是java常用了的匿名类型呀(在new { }这一步时,编译器就会将其类型确定下来,等到运行时,data.State自然就是未定义.),
so 我觉得可以这么理解
而dynamic应该属于运行时的动态类型,匿名类型属于编译前的动态类型
偶然看到一个语法,觉得特别方便然后频繁使用,但是没有深究,直到今天忽然发现我潜意思中对它的认知居然是错误的.
var data=new { State=1,Message="ok!" };
我一直以为这是动态类型对象,因为前面用了var
知道今天我看到了ViewBag.StatusMessage 这时突然一下子发现(其实之前有关门看到ViewData做比较的文章,但一直没想起来这货),
这种语法和JavaScript的类型是一样的,于是我F12了一把:"public dynamic ViewBag { get; }"
ViewBag 是动态类型dynamic,那var
data是什么类型呢?
然后我尝试这样写
var data=new { };
data.State=1;
编译错误不包含State定义....so我瞬间,醒悟这是java常用了的匿名类型呀(在new { }这一步时,编译器就会将其类型确定下来,等到运行时,data.State自然就是未定义.),
so 我觉得可以这么理解
而dynamic应该属于运行时的动态类型,匿名类型属于编译前的动态类型
相关文章推荐
- c#winform选择文件,文件夹,打开指定目录方法
- c# 一维数组和二维数组的定义几种方式
- Combobox使用
- C#中集合汇总
- C#委托和事件
- C# 基础知识 1
- C#多态之虚方法
- C#程序中session值的保存方法以及转为字符串的方法总结
- C#程序中session的基本设置示例及清除session的方法
- C#中DllImport用法
- C#实现属于自己的QQ截图工具
- C#一般处理程序 ashx.cs使用Session报错问题
- C#线程处理系列之线程池中的I/O线程
- C#委托基础:谈委托和接口
- C# 命名规范
- C#的一些零散东西
- C#基础知识---飞行棋小游戏
- C#List泛型集合
- C#StreamReader和StreamWriter
- C# Dictionary