zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

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

数据反射 如何 利用 构建 查看器
2023-06-13 09:15:01 时间

原理比较简单,引入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:********