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

  • 相关阅读:
    利用opengl画一个水波的曲面
    Eclipse 使用OpenGL
    Javascript学习过程(二)
    Workflow Learing
    YAWL设计实例
    YAWL使用方法
    ImageJ二次开发学习纪录之初步体会
    [LeetCode 660] Remove 9
    [LeetCode 1542] Find Longest Awesome Substring
    [LeetCode 879] Profitable Schemes
  • 原文地址:https://www.cnblogs.com/mq0036/p/7017422.html
Copyright © 2011-2022 走看看