zoukankan      html  css  js  c++  java
  • c#4.0中的动态编程

    c#4.0中的dynamic早已不是新闻了,虽然内部用反射机制,略微会有一些性能上的额外开销,但是有些特殊场景还是很有用的,二害相权,取其轻吧(也正是因为这些动态编程特性,Python,Ruby这类动态语言能更方便的融入到.net平台中)

    using System;
    using System.Collections.Generic;
    using System.Dynamic;
    namespace DynamicTest
    {
        class Program
        {
            public static void Main(string[] args)
            {
                dynamic obj = new ExpandoObject();
    
                //动态添加一些属性
                obj.name = "Jimmy";
                obj.age = 30;
    
                //动态添加一个方法
                obj.sayHello = new Action<string>(SayHello);
    
                foreach (var item in (IDictionary<string, object>)obj)
                {
                    if (item.Key == "sayHello")
                    {
                        //调用动态添加的方法
                        Action<string> a = item.Value as Action<String>;
                        a("CLR 4.0");
                    }
                    else
                    {
                        Console.WriteLine("key={0},value={1}", item.Key, item.Value);
                    }
                }
    
                Console.WriteLine("-----------------------------------------------");
    
                var d = (IDictionary<string, object>)obj;
                d.Remove("name");//删除name属性
                d.Remove("sayHello");//删除动态添加的方法
                d.Remove("notExist");//删除一个并不存在的东西(不会引发异常)
    
                foreach (var item in (IDictionary<string, object>)obj)
                {
                    Console.WriteLine("key={0},value={1}", item.Key, item.Value);
                }
    
                Console.Read();
            }
    
            public static void SayHello(string msg)
            {
                Console.WriteLine("Hello,{0}!", msg);
            }
    
        }
    }
     
    

    运行结果:

    key=name,value=Jimmy
    key=age,value=30
    Hello,CLR 4.0!
    ------------------------------
    key=age,value=30

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    对于函数中多个返回值的处理
    Docker-compose 安裝单机版redis
    设计模式七大设计原则
    UML 设计技巧
    使用Docker 容器配置nexus3.29 私有仓库
    分布式消息Kafka通信原理分析
    分布式消息Kafka通信
    使用docker 搭建nexus3.29
    分布式消息Kafka初步认识及基本应用
    Dubbo 常用配置及源码分析
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2005474.html
Copyright © 2011-2022 走看看