using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using System.Text; public class RefPrint
{
public static PrintLog PrintTool; private static StringBuilder sb = new StringBuilder(); public static void PrintClassInfo<T>(T obj) where T : class
{
if (obj == null)
{
PrintTool.WriteLine("print class of null");
return;
}
sb = new StringBuilder();
sb = sb.AppendLine(obj.GetType().Name);
Type t = obj.GetType();
PrintFields(t, obj);
PrintTool.WriteLine(sb.ToString());
} public static void PrintClassInfo(object obj)
{
if (obj == null)
{
PrintTool.WriteLine("print class of null");
return;
} sb = new StringBuilder();
sb = sb.AppendLine(obj.GetType().Name);
Type t = obj.GetType();
PrintFields(t, obj);
PrintTool.WriteLine(sb.ToString());
} public static void PrintList(object listValue)
{
IEnumerable e = listValue as IEnumerable;
FieldInfo[] fList = null;
foreach (var c in e)
{
fList = c.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (var item in fList)
{
sb = sb.AppendLine(item.FieldType.Name + "\t" + item.Name + "\t" + item.GetValue(c).ToString());
}
}
} public static void PrintAry(object aryValue)
{
IEnumerable e = aryValue as IEnumerable;
FieldInfo[] fList = null;
foreach (var c in e)
{
if (c.GetType().Name.Contains("String"))
{
sb = sb.AppendLine(c.GetType().Name + "\t" + c);
}
else if (!c.GetType().Name.Contains("String") && c.GetType().IsClass)
{
fList = c.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (var item in fList)
{
sb = sb.AppendLine(item.FieldType.Name + "\t" + item.Name + "\t" + item.GetValue(c));
}
}
else
{
sb.AppendLine(c.GetType().Name + "\t" + c + "\t");
}
}
} public static void PrintMemebers(Type t, object value)
{
var mList = t.GetMembers(); foreach (var item in mList)
{
sb = sb.AppendLine("method: " + item.Name);
}
} public static void PrintFields(Type t, object value)
{
var fList = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
foreach (var item in fList)
{
if (!item.FieldType.IsClass || (item.FieldType.Name == "String"))
sb = sb.AppendLine(item.FieldType.Name + "\t" + item.Name + "\t" + item.GetValue(value)); if (item.FieldType.Name.Contains("List"))
{
sb = sb.AppendLine("集合" + item.Name + ":");
Object listValue = item.GetValue(value);
PrintList(listValue);
} if (item.FieldType.Name.Contains("[]"))
{
sb = sb.AppendLine("数组" + item.Name + ":");
Object aryValue = item.GetValue(value);
PrintAry(aryValue);
}
}
} public static void PrintProperties(Type t, object value)
{
var pList = t.GetProperties(); foreach (var item in pList)
{
sb = sb.AppendLine(item.Name + " " + item.GetValue(value, new object[] { }));
}
}
} public interface PrintLog
{
void WriteLine(string text);
}

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Collections; namespace 反射查看类的信息
{
class Program
{
static void Main(string[] args)
{ PlateFace f = new PlateFace();
f.Add(new PlateFaceSon()); RefPrint.PrintTool = new MyPrint();
RefPrint.PrintClassInfo<PlateFace>(f);
Console.ReadLine();
}
} public class MyPrint : PrintLog
{ public void WriteLine(string text)
{
Console.WriteLine(text);
}
} public class PlateFace
{
private int a = 1;
private double b = 2;
private string c = "c";
private int[] d = { 1, 2, 3, 4 };
private string[] e = { "A", "b", "c", "1" }; private List<PlateFaceSon> f = new List<PlateFaceSon>();
private Dictionary<int, PlateFaceSon> j = new Dictionary<int, PlateFaceSon>(); public void Test() { }
public void Add(PlateFaceSon t)
{
f.Add(t);
}
} public class PlateFaceSon
{
public string Name = "盘子脸的儿子";
public int Age = 10; public override string ToString()
{
return "Name: " + Name + "Age: " + Age;
}
}
}

 

C# 利用反射查看类的信息的更多相关文章

  1. java利用反射访问类的私有(private)属性及方法

    Java语言中,在一个类中,为了不让外界访问到有的属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的 ...

  2. Java利用反射取得类的所有信息

    Java中可以利用反射获取类的名称.构造函数.属性.方法.也就是说可以通过反射可以取得类的所有信息(不管该成员是否封装为private). 如有下面的Dept类定义: package org.lyk. ...

  3. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  4. 利用CMD查看系统硬件信息

    利用CMD查看系统硬件信息对于在windows下查看系统信息大家一定不陌生了,我现在说几个最常用的方法,对命令感兴趣的朋友看看,(给菜鸟看的,老手就不要笑话我了,大家都是从那个时候过来的,^_^).一 ...

  5. JAVA基础知识之JVM-——通过反射查看类信息

    Class实例 当类被加载之后,JVM中就会生成一个Class实例,通过这个实例就可以访问JVM中的这个类.有三种方式可以获取Class对象 使用Class的静态方法forName(完整包名) 调用类 ...

  6. .Net 中的反射(查看基本类型信息) - Part.2

    反射概述 和Type类 1.反射的作用 简单来说,反射提供这样几个能力:1.查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata):2.迟绑定(Late-Binding)方法和属性.3 ...

  7. .Net 中的反射(查看基本类型信息)

    反射概述 和Type类 1.反射的作用 简单来说,反射提供这样几个能力:1.查看和遍历类型(及其成员)的基本信息和程序集元数据(metadata):2.迟绑定(Late-Binding)方法和属性.3 ...

  8. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

  9. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

随机推荐

  1. TCP/IP协议原理与应用笔记05:TCP/IP协议下的网关

    大家都知道,从一个房间走到另一个房间,必然要经过一扇门.同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关.顾名思义,网关(Gateway)就是一个网络连接到另一个网络的& ...

  2. 大数据笔记05:大数据之Hadoop的HDFS(数据管理策略)

            HDFS中数据管理与容错 1.数据块的放置       每个数据块3个副本,就像上面的数据库A一样,这是因为数据在传输过程中任何一个节点都有可能出现故障(没有办法,廉价机器就是这样的) ...

  3. Adding Swap Files

    Adding Swap Files If you do not have free disk space to create a swap partition and you do need to a ...

  4. XFire构建服务端Service的两种方式

    1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...

  5. ORACLE日期加减【转】

    首先,感谢这个作者的辛勤汗水给我们带来的总结,因为日期函数操作对平时的使用真的是很常用,所以收藏一下以作后期使用. 原贴地址:http://www.cnblogs.com/xiao-yu/archiv ...

  6. POP动画引擎中Layer与CALayer的一点区别

    POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步: https://github.com/facebook/pop 下面简单的讲 ...

  7. QC 2.0为啥可以快充

    根据高通给出的数据,Quick Charge 2.0 A级标准规定的最大充电电流为3A,如果在5V的情况下,充电功率就为15W,因此充电速度要比最高支持10W的Quick Charge 1.0技术更快 ...

  8. jQuery版本引发的血案 iframe error 和 checkbox 无法勾选

    问题介绍: 1.由于我们的项目里面用了很多Iframe,在初始话加载的时候页面就会报错.一开始调试很久没找到什么原因,看打印结果页面会被两次load,只能一步步找, 最后发现在document rea ...

  9. part3

    我就不刁旭概念什么的问题了哈~直接进入工作中所通用的一些有关object的方法和属性 1).for/in 属性的遍历~他遍历的对象没有特定的顺序,而且只能枚举出所有用户自定义的属性,不能枚举出某些预定 ...

  10. thinkphp3.23整合phpexcel

    HINKPHP3.2.3整合PHPexcel实现数据的导入导出.可以上传excel文件后批量导入到数据库,兼容.xls和.xlsx格式:数据库里的数据可以按照搜索条件和分页导出为excel文件.最近接 ...