如何利用反射构建元数据查看器
发布时间: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: ********


猜你喜欢
- springboot对压缩请求的处理最近对接银联需求,为了节省带宽,需要对报文进行压缩处理。但是使用springboot自带的压缩设置不起作
- 为什么要学习Android与H5互调?微信,QQ空间等大量软件都内嵌了H5,不得不说是一种趋势。Android与H5互调可以让我们的实现混合
- 在作应用系统开发时,管理配置是必不可少的。例如数据库服务器的配置、安装和更新配置等等。由于Xml的兴起,现在的配置文件大都是以xml文档来存
- 1.SpringCache的概念首先我们知道jpa,jdbc这些东西都是一些规范,比如jdbc,要要连接到数据库,都是需要用到数据库连接,预
- 本文实例为大家分享了Android seekbar实现可拖动进度条的具体代码,供大家参考,具体内容如下SeekBar通过滑块的位置来标识数值
- 看了网上关于记事本的查找替换很多,但都没有达到我想要的结果,然后自己学习总结了以下的方法:统计字符串(汉字,字母,数字,字符)先上效果图定义
- Atomikos是一个为Java平台提供增值服务的并且开源类事务管理器,如果将事务统一注册到Atomikos中,则可以统一管理。常用于后台管
- Android RadioButton 图片位置与大小Java:rgGroup = (RadioGroup) findViewById(R.
- 一、Android前端实现新建一个login的项目,主要的几个文件在这里1、gradle引入OKhttp3依赖implementation
- 这篇文章主要介绍了SpringMVC的执行流程及组件详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2. 顺序一致性
- 通常,我们会被要求实现类似支付宝首页的特效:随着界面的滑动,标题栏的背景透明度渐变。在实际开发中,常见的滑动有列表RecyclerView(
- 本文实例总结了Android开发之资源文件用法。分享给大家供大家参考,具体如下:这里记录在Android开发中经常用到的一些用法arrays
- 本文实例讲述了Android编程实现读取本地SD卡图片的方法。分享给大家供大家参考,具体如下:private Bitmap getDiskB
- 在C#中,@符号不仅可以加在字符串常量之前,使字符串不作转义之用,还可以加在变量名之前,使变量名与关键字不冲突,这种用法称为“逐字标识符”。
- 经过一番搜索发现,java操纵excel文件常用的有jxl和poi两种方式,孰好孰坏看自己需求而定。其中最主要的区别在于jxl不支持.xls
- 本文实例为大家分享了ManualResetEvent的使用方法,供大家参考,具体内容如下1. 源码下载:下载地址:ManualResetEv
- 本文实例讲述了C#遍历指定目录下所有文件的方法。分享给大家供大家参考。具体分析如下:先通过DirectoryInfo打开指定的目录,然后通过
- maven 常见命令配置maven常用命令#创建项目 -D设置参数mvn archetype:generate -DgroupId=cn.d
- C++ boost::asio编程-异步TCP大家好,我是异步方式和同步方式不同,我从来不花时间去等那些龟速的IO操作,我只是向系统说一声要