如何利用反射构建元数据查看器
原理比较简单,引入System.Reflection命名空间,利用反射查看某种Type下的方法,属性,字段和支持的接口等。
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Net;
usingSystem.IO;
usingSystem.Data.SqlClient;
usingSystem.Xml;
usingSystem.Data;
usingSystem.Reflection;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
while(true)
{
Console.WriteLine("Pleaseinputatype:");
stringtypeStr=Console.ReadLine();
if(typeStr=="exit"||typeStr=="quit")
break;
try
{
Typetype=Type.GetType(typeStr);
ListFields(type);
ListMethods(type);
ListInterfaces(type);
}
catch(Exceptionex)
{
Console.WriteLine("Itisnotavalidtype!");
}
}
}
#regionMethods
publicstaticvoidListFields(Typetype)
{
Console.WriteLine("********Fields:********");
//foreach(FieldInfoitemintype.GetFields(BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static|BindingFlags.Default))
foreach(FieldInfoitemintype.GetFields())
{
Console.WriteLine("->"+item.Name);
}
Console.WriteLine("");
}
publicstaticvoidListMethods(Typetype)
{
Console.WriteLine("********Methods:********");
//foreach(varitemintype.GetMethods(BindingFlags.Default|BindingFlags.Public|BindingFlags.Static|BindingFlags.NonPublic))
varmethodInfo=type.GetMethods().Select(m=>m.Name).Distinct();
foreach(variteminmethodInfo)
{
Console.WriteLine("->"+item);
}
Console.WriteLine("");
}
publicstaticvoidListInterfaces(Typetype)
{
Console.WriteLine("********Interfaces:********");
foreach(varitemintype.GetInterfaces())
{
Console.WriteLine("->"+item.Name);
}
Console.WriteLine("");
}
publicstaticvoidListProperties(Typetype)
{
Console.WriteLine("********Properties:********");
foreach(varitemintype.GetProperties())
{
Console.WriteLine("->"+item.Name);
}
Console.WriteLine("");
}
#endregion
}
}
测试case1:
Pleaseinputatype:
System.Int32
********Fields:********
->MaxValue
->MinValue
********Methods:********
->CompareTo
->Equals
->GetHashCode
->ToString
->Parse
->TryParse
->GetTypeCode
->GetType
********Interfaces:********
->IComparable
->IFormattable
->IConvertible
->IComparable`1
->IEquatable`1
测试case2:
Pleaseinputatype:
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:********
相关文章
- 数据降维_数据降维的目的
- .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法
- 必须会的SQL语句(六) 数据查询
- 重塑缓存:用Redis清除数据(redis数据清空)
- 失效Redis 与 Java 结合,实现数据有效性保障(redisjava过期)
- 谷歌布局大数据:开源平台 Apache Beam 正式发布
- MySQL中插入新数据的快速方法(向mysql中插入数据)
- 高效保障数据质量——Oracle数据库同步技术探析(数据库同步oracle)
- 据 如何利用SQL Server快速导入大量数据(sqlserver导数)
- Oracle 优势:调用SUM函数实现数据统计(oracle的sum函数)
- onkeydown事件解决按回车键直接提交数据的需求
- 浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)