zoukankan      html  css  js  c++  java
  • C#基础:dynamic类型

    dynamic类型是.NET 4.0引入的一个新的概念,它的目的是增强与python等动态语言的互操作性。由于动态的原因,使得dynamic类型的变量只有在运行时才能被确定具体类型,而编译器也会绕过对这种类型的语法检查。其实这样做是危险的。

    下面的代码演示了在C#中如何使用dynamic类型:

    class Person
    {
        public string Name { get; set; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            dynamic c = new Person();
            c.Name = "abc";
            c.Age = 30;
            Console.WriteLine(c.Name);
        }
    }
    

    这段代码是可以编译通过的,尽管Person类中并没有定义Age这个公有属性,因为c的类型是在运行时动态绑定的,因此,执行这段代码时就会出现如下的错误:

    由于编译器会忽略由dynamic定义的变量,因此它能够用来解决一些与强类型“冲突”的问题。不知您是否还记得我之前写的一篇关于泛型的接口抽象的文章。那么,我们可以使用dynamic变量来解决这篇文章中提出的问题。代码如下:

    public interface IXRefData
    {
        // TODO: add definition here         
    }
    
    public class XRefComponent<TData>
        where TData : IXRefData
    {
        public void Update() { }
    }
    
    public class XRefPickData : IXRefData { }
    
    public class XRefPackData : IXRefData { }
    
    public class XRefUpdator
    {
        private List<dynamic> components = new List<dynamic>();
        public List<dynamic> Components
        {
            get { return components; }
            set { components = value; }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            XRefUpdator updator = new XRefUpdator();
            
            // 现在就可以将两种完全不同的类型添加到Component列表中了
             updator.Components.Add(
                new XRefComponent<XRefPickData>());
    
            updator.Components.Add(
                new XRefComponent<XRefPackData>());
        }
    }
    

    最后提一句,使用dynamic的程序最好做一下单体测试,因为它可能带来更多的运行时错误。

  • 相关阅读:
    nagios对windows流量的检测
    Zabbix中文使用手册
    SNMP的应用
    十大经典排序算法最强总结(含JAVA代码实现)
    各种排序算法总结和比较
    MyBatis的Insert操作详解
    MyBatis 返回insert操作主键
    MyBatis insert/delete/update 的返回值
    利用aopc创建schema失败
    neo4j开发自定义存储过程注意事项
  • 原文地址:https://www.cnblogs.com/daxnet/p/1686958.html
Copyright © 2011-2022 走看看