如何利用反射构建元数据查看器

时间:2021-05-27 00:11:05 

原理比较简单,引入System.Reflection命名空间,利用反射查看某种Type下的方法,属性,字段和支持的接口等。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Xml;
using System.Data;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Please input a type:");
                string typeStr = Console.ReadLine();

                if (typeStr == "exit" || typeStr == "quit")
                    break;

                try
                {
                    Type type = Type.GetType(typeStr);
                    ListFields(type);
                    ListMethods(type);
                    ListInterfaces(type);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("It is not a valid type!");
                }
            }

        }

        #region Methods
        public static void ListFields(Type type)
        {
            Console.WriteLine("******** Fields: ********");
            //foreach (FieldInfo item in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Default))
            foreach (FieldInfo item in type.GetFields())
            {
                Console.WriteLine("->" + item.Name);
            }
            Console.WriteLine("");
        }

        public static void ListMethods(Type type)
        {
            Console.WriteLine("******** Methods: ********");
            //foreach (var item in type.GetMethods(BindingFlags.Default | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic))
            var methodInfo = type.GetMethods().Select(m => m.Name).Distinct();
            foreach (var item in methodInfo)
            {
                Console.WriteLine("->" + item);
            }
            Console.WriteLine("");
        }

        public static void ListInterfaces(Type type)
        {
            Console.WriteLine("******** Interfaces: ********");
            foreach (var item in type.GetInterfaces())
            {
                Console.WriteLine("->" + item.Name);
            }
            Console.WriteLine("");
        }

        public static void ListProperties(Type type)
        {
            Console.WriteLine("******** Properties: ********");
            foreach (var item in type.GetProperties())
            {
                Console.WriteLine("->" + item.Name);
            }
            Console.WriteLine("");
        }
        #endregion

    }

}

测试case 1:


Please input a type:
System.Int32
******** Fields: ********
->MaxValue
->MinValue

******** Methods: ********
->CompareTo
->Equals
->GetHashCode
->ToString
->Parse
->TryParse
->GetTypeCode
->GetType

******** Interfaces: ********
->IComparable
->IFormattable
->IConvertible
->IComparable`1
->IEquatable`1

测试case 2:


Please input a type:
System.Math
******** Fields: ********
->PI
->E

******** Methods: ********
->Acos
->Asin
->Atan
->Atan2
->Ceiling
->Cos
->Cosh
->Floor
->Sin
->Tan
->Sinh
->Tanh
->Round
->Truncate
->Sqrt
->Log
->Log10
->Exp
->Pow
->IEEERemainder
->Abs
->Max
->Min
->Sign
->BigMul
->DivRem
->ToString
->Equals
->GetHashCode
->GetType

******** Interfaces: ********

标签:反射构建元数据查看器
0
投稿

猜你喜欢

  • c#实现多线程局域网聊天系统

    2022-12-01 23:34:25
  • springboot接口参数校验JSR303的实现

    2023-01-19 03:14:56
  • 为Xamarin.Forms的导航栏增加搜索功能

    2022-01-28 18:38:58
  • 详解Spring Cloud负载均衡重要组件Ribbon中重要类的用法

    2023-07-06 02:54:01
  • MyBatis字段名和属性名不一致的解决方法

    2022-12-15 18:15:22
  • SpringBoot注解梳理(小结)

    2023-11-10 13:27:19
  • 基于servlet实现统计网页访问次数

    2021-11-05 08:35:13
  • eclipse maven 插件的安装和配置详解

    2023-08-24 16:57:01
  • Java聊天室之使用Socket实现通信功能

    2022-03-08 09:46:27
  • Java AtomicInteger类使用方法实例讲解

    2023-01-18 16:22:49
  • c#和net存取cookies操作示例

    2023-10-11 15:28:26
  • Springboot 在普通类型注入Service或mapper

    2023-11-29 15:26:21
  • Spring-Data-JPA整合MySQL和配置的方法

    2023-10-29 10:19:41
  • C#编程获取资源文件中图片的方法

    2023-05-23 06:13:39
  • Java8 Stream流多字段求和、汇聚的实例

    2023-03-14 20:17:23
  • java写卷积神经网络(CupCnn简介)

    2022-12-11 09:33:09
  • Spring MVC4.1服务器端推送实现过程解析

    2021-07-24 14:53:16
  • Spring Data JPA带条件分页查询实现原理

    2023-07-23 21:32:54
  • Java获取文件的路径及常见问题解决方案

    2023-04-16 04:24:15
  • 浅谈Spring Security LDAP简介

    2022-09-19 20:30:06
  • asp之家 软件编程 m.aspxhome.com