zoukankan      html  css  js  c++  java
  • 利用反射执行代码

    项目组经常有用到反射来执行代码的,直接上代码,大家一看就明白。

        public class PrimaryKeyAttribute : Attribute
        { }
        public class DbColumnAttribute : Attribute
        {
            public string Name { get; set; }
            public DbColumnAttribute(string name)
            {
                this.Name = name;
            }
        }
        public class Client
        {
            [PrimaryKey]
            [DbColumn("client_id")]
            public int ClientId { get; set; }
    
            [DbColumn("last_name")]
            public string LastName { get; set; }
    
            [DbColumn("first_name")]
            public string FirstName { get; set; }
    
            [DbColumn("email")]
            public string Email { get; set; }
        }
    
    
            static void Test3()
            {
                var client = new Client() { ClientId = 2, LastName = "James", FirstName = "jon", Email = "jon@163.com" };
                WritePK<Client>(client);
                Console.WriteLine();
                WriteColumnMappings<Client>(client);
            }
    
            public static void WritePK<T>(T item) where T : new()
            {
                var type = item.GetType();
                var queryPts = type.GetProperties();
                Console.WriteLine("Finding PK for {0} ...", type.Name);
    
                var pk = queryPts.FirstOrDefault(x =>
                            x.GetCustomAttributes(false).Any(
                                a => a.GetType() == typeof(PrimaryKeyAttribute)
                            )
                        );
                if (pk != null)
                {
                    string msg = "The Primary Key for the {0} class is the {1} property";
                    Console.WriteLine(msg, type.Name, pk.Name);
                }
            }
    
            public static void WriteColumnMappings<T>(T item) where T : new()
            {
                var type = item.GetType();
                var queryPts = type.GetProperties();
                Console.WriteLine("Finding properties for {0} ...", type.Name);
    
                foreach (var p in queryPts)
                {
                    var attributes = p.GetCustomAttributes(false); //获取属性的特性
                    var columnMapping = attributes.FirstOrDefault(a =>
                                            a.GetType() == typeof(DbColumnAttribute)
                                        );
                    if (columnMapping != null)
                    {
                        string msg = "the {0} property maps to the {1} database column";
                        var mapsto = columnMapping as DbColumnAttribute;
                        Console.WriteLine(msg, p.Name, mapsto.Name);
                    }
                }
            }

    输出结果:

    出处:http://blog.csdn.net/joyhen/article/details/39206427

  • 相关阅读:
    CSP2020 游记
    React中useLayoutEffect和useEffect的区别
    Vue前后端分离跨域踩坑
    Python 正则将link 和 script 处理为 Django static形式
    BootStrap4
    单例模式
    匈牙利算法——求二部图的最大匹配的匹配数
    抽象工厂模式
    工厂方法模式
    JDK配置步骤
  • 原文地址:https://www.cnblogs.com/mq0036/p/7017422.html
Copyright © 2011-2022 走看看