zoukankan      html  css  js  c++  java
  • C#-dynamic参考

    dynamic 类型的作用是绕过编译时类型检查,改为在运行时进行解析。 dynamic 类型简化了对 COM API(例如 Office Automation API)、动态 API(例如 IronPython 库)和 HTML 文档对象模型 (DOM) 的访问。

    在大多数情况下,dynamic 类型与 object 类型的行为类似。 但是,如果操作包含 dynamic 类型的表达式,那么不会通过编译器对该操作进行解析或类型检查。 编译器将有关该操作信息打包在一起,之后这些信息会用于在运行时评估操作。 在此过程中,dynamic类型的变量会编译为 object 类型的变量。 因此,dynamic 类型只在编译时存在,在运行时则不存在。

    class Program
    {
        static void Main(string[] args)
        {
            dynamic dyn = 1;
            object obj = 1;
    
            // Rest the mouse pointer over dyn and obj to see their
            // types at compile time.
            System.Console.WriteLine(dyn.GetType());
            System.Console.WriteLine(obj.GetType());
        }
    }

    上下文

    dynamic 关键字可以直接出现,也可以作为构造类型的组件在下列情况中出现:

    • 在声明中,作为属性、字段、索引器、参数、返回值、本地变量或类型约束的类型。 下面的类定义在多个不同的声明中使用 dynamic
    class ExampleClass
    {
        // A dynamic field.
        static dynamic field;
    
        // A dynamic property.
        dynamic prop { get; set; }
    
        // A dynamic return type and a dynamic parameter type.
        public dynamic exampleMethod(dynamic d)
        {
            // A dynamic local variable.
            dynamic local = "Local variable";
            int two = 2;
    
            if (d is int)
            {
                return local;
            }
            else
            {
                return two;
            }
        }
    }
    • 在显式类型转换中,作为转换的目标类型。
    static void convertToDynamic()
    {
        dynamic d;
        int i = 20;
        d = (dynamic)i;
        Console.WriteLine(d);
    
        string s = "Example string.";
        d = (dynamic)s;
        Console.WriteLine(d);
    
        DateTime dt = DateTime.Today;
        d = (dynamic)dt;
        Console.WriteLine(d);
    
    }
    // Results:
    // 20
    // Example string.
    // 7/25/2018 12:00:00 AM
    • 在以下任何情况下:类型用作值(如 is 运算符或 as 运算符右侧),或者用作构造类型中 typeof 的参数。 例如,可以在下列表达式中使用 dynamic
    int i = 8;
    dynamic d;
    // With the is operator.
    // The dynamic type behaves like object. The following
    // expression returns true unless someVar has the value null.
    if (someVar is dynamic) { }
    
    // With the as operator.
    d = i as dynamic;
    
    // With typeof, as part of a constructed type.
    Console.WriteLine(typeof(List<dynamic>));
    
    // The following statement causes a compiler error.
    //Console.WriteLine(typeof(dynamic));

    示例

    下面的示例在多个声明中使用 dynamic。 Main 方法也将编译时类型检查与运行时类型检查进行了对比。

    using System;
    
    namespace DynamicExamples
    {
        class Program
        {
            static void Main(string[] args)
            {
                ExampleClass ec = new ExampleClass();
                Console.WriteLine(ec.exampleMethod(10));
                Console.WriteLine(ec.exampleMethod("value"));
    
                // The following line causes a compiler error because exampleMethod
                // takes only one argument.
                //Console.WriteLine(ec.exampleMethod(10, 4));
    
                dynamic dynamic_ec = new ExampleClass();
                Console.WriteLine(dynamic_ec.exampleMethod(10));
    
                // Because dynamic_ec is dynamic, the following call to exampleMethod
                // with two arguments does not produce an error at compile time.
                // However, itdoes cause a run-time error. 
                //Console.WriteLine(dynamic_ec.exampleMethod(10, 4));
            }
        }
    
        class ExampleClass
        {
            static dynamic field;
            dynamic prop { get; set; }
    
            public dynamic exampleMethod(dynamic d)
            {
                dynamic local = "Local variable";
                int two = 2;
    
                if (d is int)
                {
                    return local;
                }
                else
                {
                    return two;
                }
            }
        }
    }
    // Results:
    // Local variable
    // 2
    // Local variable
  • 相关阅读:
    判断php变量是否定义,是否为空
    HTTP Client 编写
    推荐《冒号课堂——编程范式与OOP思想》
    一些免费的HTML编辑器
    如何判断mysql中数据表中两个列之间的相同记录和不同记录
    PostgreSQL 8.4, SQL Server 2008, MySQL 5.1比较
    JDBC纵览
    使用jdbc连接sql数据库
    关于PHP中变量的判定
    如何判断数据库中是否存在一个数据表
  • 原文地址:https://www.cnblogs.com/wangyihome/p/10344841.html
Copyright © 2011-2022 走看看