writeline方法的作用c#动态类型
⼀、动态类型其实是动态编译的⼀种形式。在4.0上添加新的动态类型dynamic,对于动态类型,就是在运⾏时才会确定的类型。
1.dynamic关键字的使⽤
1)使⽤var可以定义本地变量,该变量的实际数据类型取决于编译时,是在初次分配时确定的,在初次分配后,将拥有⼀个强类型的变量,任何不相容的的赋值操作都会导致编译错误:
static void Main(string[] args)
{
var a = new List<int>();
a.Add(90);
a = "hello";
}
2)随着4.0的发布,c#引⼊⼀个关键字dynamic,我们可以把任何值设置为动态的数据类型,因此可以认为dynamic是⼀种特殊的System.Object,因此我们现在有三种定义数据的⽅式,但动态数据不是静态类型,对于dynamic声明的数据可以分配任何初始值,并且可以在⽣命周期中重新分配新的值。
2.调⽤动态声明数据的成员
在动态数据后加个.,然后指定公共成员,但是编译器不会检查成员的有效性,直到运⾏时才会检查成员调⽤、参数等的有效性。如下代码:
static void Main(string[] args)
{
dynamic a = "hello";
Console.WriteLine(a.ToUpper());
Console.upper());
Console.WriteLine(a.Foo(10,DateTime.Now));
}
除此之外,调⽤动态数据的成员时VS不会获取智能提⽰,⽽强类型可以。
3.MicroSoft.CSharp.dll的作⽤
在VS创建新的项⽬的时候,将⾃动引⼊MicroSoft.CSharp.dll程序集,这个程序集包含MicroSoft.CSharp.RuntimeBinder命名空间和两个类:RuntimeBinderException和RuntimeBinderInternalCompilerException,如果试图调⽤⼀个不存在的动态数据的成员或者调⽤了⼀个存在的成员且错误的参数数据时,将会抛出RuntimeBinderException。
由于动态数据的不确定性,可以在调⽤成员时通过try catch来进⾏包裹。
4.dynamic关键字的作⽤域
⽤var声明的数据只能作为⼀个成员范围内的本地变量,不能⽤于返回值、参数和类成员, 但对于dynamic来说可以实现。
5.dynamic关键字的限制
在调⽤⼀个动态数据的⽅法时,不能使⽤Lambda表达式和c#匿名⽅法。另外⼀个是,dynamic声明的数据不能⽤于Linq技术。
6.dynamic关键字的实际⽤途
在某些场景中,dynamic关键字可以减少⼿⼯输⼊的代码量,特别是⼀个⼤量使⽤后期绑定(通过反射)的应⽤程序,使⽤dynamic关键字是在⽤类型的安全换取代码的简洁度,动态类型并不是必须的,需要根据具体的场景来决定是否使⽤动态⾏为。
⼆、DLR
DLR(动态语⾔运⾏时)随着 4.0⼀起发布,作为CLR的补充运⾏时环境,DLR的作⽤之⼀是使不同的动态语⾔能在运⾏时运⾏,最常⽤的是IronPython和IronRuby。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论