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
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux关闭jetty服务器脚本
    TreeMap 源码解读
    LinkedHashMap 源码解读
    HashTable 源码解读
    MappedByteBuffer文件句柄释放问题
    HashMap源码解读
    Java 对象创建过程
    java 虚拟机内存介绍
    dubbo 部署
    kotlin 学习入门
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/2005474.html
Copyright © 2011-2022 走看看