📜  C#4.0 动态绑定

📅  最后修改于: 2020-11-01 03:03:07             🧑  作者: Mango

C#动态绑定

C#dynamic是用于使属性或方法动态化的关键字。当我们创建动态类型时,编译器不会在编译时检查它。编译器仅在运行时检查它。

使用动态绑定的目的是避免对代码进行编译时检查。

使用dynamic关键字创建的属性的作用类似于object。动态变量被编译为类型对象变量,并且仅在编译时存在,而在运行时不存在。

动态和对象的类型都相似。我们可以使用以下代码进行检查。

C#动态绑定示例1

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

现在,让我们操作这两个对象,看看它们的区别。

C#动态示例2

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'

动态特性和方法

在下面的示例中,我们将创建动态属性和方法。

C#动态绑定示例

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