本文仅为个人理解,如有错误请指正。
var:实际上编译器抛给我们的语法糖,一旦被编译,编译器就会自动匹配var变量的实际类型,并用实际类型来替换该变量的声明,等同于我们在编码时使用了实际类型声明,使用var声明的变量,赋值必须与声明时候的类型一致。
dynamic:Net 4.0中新增功能 动态语言运行时,在运行时确定其类型,被编译后是一个Object类型,编译器编译时不会对dynamic进行类型检查,daynamic声明的变量,可以随意进行赋值,dynamic类型的实例与其他类型的实例进行转换时很简单的直接赋值即可。
object:Object类型,因为object是一切类型基类,任何类型可以直接赋值给object类型。
举例:
private void button5_Click(object sender, EventArgs e)
{
var varObj = "123";
//System.String
Debug.WriteLine(varObj.GetType().FullName);
dynamic dynamicObj = 1;
//System.Int32
string typeName = dynamicObj.GetType().FullName;
dynamicObj = '2';
//System.Char
typeName = dynamicObj.GetType().FullName;
char charObj = dynamicObj;
dynamicObj = "123";
//System.String
typeName = dynamicObj.GetType().FullName;
string stringObj = dynamicObj;
object obj = 123;
//System.Int32
Debug.WriteLine(obj.GetType().FullName);
obj = "123";
//System.String
Debug.WriteLine(obj.GetType().FullName);
}
概念补充:
编程语言可以文化分为静态类型化语言和动态类型化语言.C#和JAVA被认为静态化类型的语言,Python,Ruby和JavaScript是动态类型语言
一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型.代码编写更快,更容易,但无法获取编译错误。只能通过单元测试和其他方式来确保应用的正常运行。