最近想做一个插件式的软件给公司的监控用,初步的想法是使用C#去反射Dll,Invoke其中的方法。此文仅供开发参考,不涉及原理,98%的代码以及2%的废话。

测试Solution是这么建的(.NET FRAMEWORK 4.5.1):

Person类代码:

 using System;
using System.Collections.Generic;
using System.Linq; namespace PersonMoudle
{
public class Person
{
public Person()
{
Name = "Sirius";
Age = ;
Height = ;
Sex = "Middle";
}
public Person(string name, int age, float height, string sex)
{
Name = name;
Age = age;
Height = height;
Sex = sex;
} public string Name { get; set; }
public int Age { get; set; }
public float Height { get; set; }
public string Sex { get; set; } public void Speak(string words)
{
Console.WriteLine(words);
}
private string GetMyName()
{
return Name.Trim();
} public string GetMySex()
{
return Sex;
} public List<string> BeenCity()
{
return new List<string>
{
"Beijing",
"Jinan",
"NewYork"
};
} public List<string> BennCity(int count)
{
return new List<string>
{
"Beijing",
"Jinan",
"NewYork"
}.Take(count).ToList();
}
}
}

控台中反射获取信息代码(控台引用类库项目,也可以load dll,后面的篇幅会写):

 using System;
using System.Linq;
using PersonMoudle; namespace ReflectionTest
{
class Program
{
static void Main(string[] args)
{
var count = ;//public count set; var person = new Person();
var personType = person.GetType();
Console.WriteLine("类型名: " + personType.Name);
Console.WriteLine("类全名: " + personType.FullName);
Console.WriteLine("命名空间名: " + personType.Namespace);
Console.WriteLine("程序集名: " + personType.Assembly);
Console.WriteLine("模块名: " + personType.Module.Name);
Console.WriteLine("是否支持泛型: "+personType.IsConstructedGenericType); //获取构造函数信息
var conInfo = personType.GetConstructors();
Console.WriteLine(personType.FullName + "共有" + conInfo.Count() + "个构造函数");
foreach (var constructorInfo in conInfo)
{
count += ;
Console.WriteLine("第" + count + "个构造函数:");
var paramsInfo = constructorInfo.GetParameters();
Console.WriteLine(paramsInfo.Any() ? "参数列表:" : "无参数。");
foreach (var parameterInfo in paramsInfo)
{
Console.WriteLine("第" + (parameterInfo.Position + ) + "参数名:" + parameterInfo.Name + ", 参数类型:" +
parameterInfo.ParameterType.FullName);
}
}
count = ; //获取事件信息
var eventInfo = personType.GetEvents();
Console.WriteLine(personType.FullName+"共有"+eventInfo.Count()+"个事件"); //获取字段信息
var fields = personType.GetFields();
Console.WriteLine(personType.FullName + " has " + fields.Count() + "fields.");
foreach (var fieldInfo in fields)
{
count += ;
Console.WriteLine("The "+count+"st field is"+fieldInfo.Name+", type is "+fieldInfo.FieldType);
}
count = ; //获取接口信息
var ifaces = personType.GetInterfaces();
Console.WriteLine(personType.FullName + " has " + ifaces.Count() + " interfaces."); //获取成员信息
var members = personType.GetMembers();
Console.WriteLine(personType.FullName+" has "+members.Count()+" members.");
foreach (var memberInfo in members)
{
count += ;
Console.WriteLine("The " + count + "st member name is " + memberInfo.Name + ", type is " +
memberInfo.ReflectedType);
}
count = ; //获取方法信息
var methods = personType.GetMethods();
Console.WriteLine(personType.FullName+" has "+methods.Count()+" methods.");
foreach (var methodInfo in methods)
{
count += ;
var paramInfos = methodInfo.GetParameters();
Console.WriteLine("The " + count + "st method is " + methodInfo.Name + ", return type is " +
methodInfo.ReturnType + ", param count is " + paramInfos.Count()); Console.WriteLine(paramInfos.Any() ? "参数列表:" : "无参数。");
foreach (var parameterInfo in paramInfos)
{
Console.WriteLine("param name:" + parameterInfo.Name + ", param type: " +
parameterInfo.ParameterType);
}
}
count = ; //propertites
var pros = personType.GetProperties();
Console.WriteLine(personType.FullName+" has "+pros.Count()+ "public properties."); Console.ReadKey();
}
}
}

下一篇讲如何调用方法。

C#中反射的使用(How to use reflect in CSharp)(1)的更多相关文章

  1. JAVA中反射机制五(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  2. JAVA中反射机制六(java.lang.reflect包)

    一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段, ...

  3. Java中反射的三种常用方式

    Java中反射的三种常用方式 package com.xiaohao.test; public class Test{ public static void main(String[] args) t ...

  4. C#中反射接受的字符串需要满足的Backus-Naur Form语法

    MSDN的Specifying Fully Qualified Type Names指明了C#中反射接受的字符串需要满足如下的Backus-Naur Form语法. BNF grammar of fu ...

  5. .NET中反射机制的使用与分析

    .NET中反射机制的使用与分析 [日期:2008-06-30] 来源:  作者:志伟     .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ...

  6. java中反射学习整理

    转载请注明:http://blog.csdn.net/j903829182/article/details/38405735 反射主要是指程序能够訪问.检測和改动它本身的状态或行为的一种能力. jav ...

  7. 在C++中反射调用.NET(二)

    反射调用返回复杂对象的.NET方法 定义数据接口 上一篇在C++中反射调用.NET(一)中,我们简单的介绍了如何使用C++/CLI并且初步使用了反射调用.NET程序集的简单方法,今天我们看看如何在C+ ...

  8. 在C++中反射调用.NET(一)

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ...

  9. 在C++中反射调用.NET(三)

    在.NET与C++之间传输集合数据 上一篇<在C++中反射调用.NET(二)>中,我们尝试了反射调用一个返回DTO对象的.NET方法,今天来看看如何在.NET与C++之间传输集合数据. 使 ...

  10. Java中反射的实现方式

    所谓反射,是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制.这种机制的作用在于获取运行时才知道的类(Class)及其中的属性(Field).方法(Method)以及调用其中的方法 ...

随机推荐

  1. Java面试题-锁

    1. 什么是可重入锁(ReentrantLock)?  答:  java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作 ...

  2. ubuntu程序安装方法

    以前一直使用window,今天安装了一个ubuntu系统(如果有同学也想装,建议装英文版的),因为以前ubuntu系统用的不多,所以安装软件就是一个问题. 就以安装chrome来说吧: 1.在Goog ...

  3. POJ2892Tunnel Warfare (线段树)

    http://poj.org/problem?id=2892 记录每个区间端点的左连续及右连续 都是单点更新 用不着向下更新 还简单点 找错找了N久 最后发现将s[w<<1|1]写成s[w ...

  4. 在Visual Studio 2010中使用DSL Tool特定领域开发 开篇

    本来是很想写关于VS的DSL的文章的,有点小忙,就一直在拖延,忽然有看见了"<在Visual Studio 2012中使用VMSDK开发特定领域语言>",又有写的欲望了 ...

  5. 解决项目中EF5.0升级到EF6.0无法安装包的方法

    今天在vs2012上新建了一个mvc4的项目,mvc4中默认的Entity Framework是5.0的版本,如下所示: 或者:,但是项目中有些要用到EF6.0的相关方法,用EF5.0实在繁琐,于是在 ...

  6. linux tmp75 /dev/i2c-* 获取数据 demo

    /********************************************************************** * linux tmp75 /dev/i2c-* 获取数 ...

  7. ichartjs

    ichartjs-基于html5的图表组件 不适合桌面端

  8. 【转】蓝牙4.0——Android BLE开发官方文档翻译

    原文网址:http://ricardoli.com/2014/07/31/%E8%93%9D%E7%89%9940%E2%80%94%E2%80%94android-ble%E5%BC%80%E5%8 ...

  9. PostgreSql与sqlserver对比杂记

    PostgreSql与MSSqlServer区别 增删查改没有语法一样. 排序Group Having 聚集函数使用一样 联结查询 ON 子句是最常见的连接条件的类型:它接收一个和 WHERE 子句相 ...

  10. 【转】JAVA中的反射机制

    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本 ...