📅  最后修改于: 2020-11-01 03:03:07             🧑  作者: Mango
C#dynamic是用于使属性或方法动态化的关键字。当我们创建动态类型时,编译器不会在编译时检查它。编译器仅在运行时检查它。
使用动态绑定的目的是避免对代码进行编译时检查。
使用dynamic关键字创建的属性的作用类似于object。动态变量被编译为类型对象变量,并且仅在编译时存在,而在运行时不存在。
动态和对象的类型都相似。我们可以使用以下代码进行检查。
using System;
namespace CSharpFeatures
{
public class DynamicExample
{
public static void Main(string[] args)
{
dynamic v = 1;
object v1 = 1;
Console.WriteLine(v.GetType());
Console.WriteLine(v1.GetType());
}
}
}
输出量
System.Int32
System.Int32
现在,让我们操作这两个对象,看看它们的区别。
using System;
namespace CSharpFeatures
{
public class DynamicExample
{
public static void Main(string[] args)
{
dynamic v = 1;
object v1 = 1;
// Modifying Objects
v = v + 3;
v1 = v1 + 5;
Console.WriteLine(v);
Console.WriteLine(v1);
}
}
}
现在,由于对象v1,它会产生编译时错误。动态对象不会在编译时进行检查,因此,在编译时不会产生任何错误。
输出量
DynamicExample.cs(13,18): error CS0019: Operator '+' cannot be applied to operands of type 'object' and 'int'
在下面的示例中,我们将创建动态属性和方法。
using System;
namespace CSharpFeatures
{
public class Student
{
// Creating dynamic property
public dynamic Name { get; set; }
// Creating a dynamic method
public dynamic ShowMSG(string msg)
{
return msg;
}
}
public class DynamicExample
{
public static void Main(string[] args)
{
Student student = new Student();
student.Name = "Peter";
Console.WriteLine(student.Name);
// Storing result in dynamic object
dynamic msg = student.ShowMSG("Welcome to the javatpoint");
Console.WriteLine(msg);
}
}
}
输出量
Peter
Welcome to the javatpoint