首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法

 public class HomeService
{
/// <summary>
/// 无参方法
/// </summary>
/// <returns></returns>
public string SayHello() {
string str = "你好!";
return str;
} /// <summary>
/// 有参方法(1个)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string SayHello(string name)
{
string str = "你好," + name + "!";
return str;
} /// <summary>
/// 有参方法(2个)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string SayHello(string name,int age)
{
string str = "你好," + name + ",你已经"+ age +"岁!";
return str;
}
}

1、正常方式调用类的方法

/// <summary>
/// 正常调用类的方法(parm1)
/// </summary>
/// <returns></returns>
public string GetNormalMethod_2()
{
HomeService service = new HomeService();
//调用有参方法(name)
string result = service.SayHello("李天");
//输出调用信息
string strs = GetInvokeInfo("SayHello(string name)", result);
return strs;
}

2、反射方式调用类的方法

/// <summary>
/// 通过反射调用类的方法(SayHello(string name))
/// </summary>
public string GetInvokeMethod_2()
{
// 1.Load(命名空间名称),GetType(命名空间.类名)
Type type = Assembly.Load("StudyInvokeMethod").GetType("StudyInvokeMethod.HomeService");
//2.GetMethod(需要调用的方法名称)
MethodInfo method = type.GetMethod("SayHello", new Type[] { typeof(string) });
// 3.调用的实例化方法(非静态方法)需要创建类型的一个实例
object obj = Activator.CreateInstance(type);
//4.方法需要传入的参数
object[] parameters = new object[] { "李天"};
// 5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
// 相应地调用静态方法时,Invoke的第一个参数为null
string result = (string)method.Invoke(obj, parameters); //输出调用信息
string strs = GetInvokeInfo("SayHello(string name)", result);
return strs;
}

3、调用代码

 public ActionResult Index()
{
/***** 通过正常调用类的方法 *****/ //1)通过正常调用方法(无参)
string arg1 = GetNormalMethod_1();
//2)通过正常调用方法(参1)
string arg2 = GetNormalMethod_2();
//3)通过正常调用方法(参1,参2)
string arg3 = GetNormalMethod_3(); /*****通过反射调用类的方法*****/ //1)通过反射调用方法(无参)
string str1 = GetInvokeMethod_1();
//2)通过反射调用方法(参1)
string str2 = GetInvokeMethod_2();
//2)通过反射调用方法(参1,参2)
string str3 = GetInvokeMethod_3(); return View();
}

4、调用结果

5、全部代码

1)Service类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; namespace StudyInvokeMethod
{
public class HomeService
{
/// <summary>
/// 无参方法
/// </summary>
/// <returns></returns>
public string SayHello() {
string str = "你好!";
return str;
} /// <summary>
/// 有参方法(1个)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string SayHello(string name)
{
string str = "你好," + name + "!";
return str;
} /// <summary>
/// 有参方法(2个)
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string SayHello(string name,int age)
{
string str = "你好," + name + ",你已经"+ age +"岁!";
return str;
}
}
}

2)控制器调用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web;
using System.Web.Mvc; namespace StudyInvokeMethod.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
/***** 通过正常调用类的方法 *****/ //1)通过正常调用方法(无参)
string arg1 = GetNormalMethod_1();
//2)通过正常调用方法(参1)
string arg2 = GetNormalMethod_2();
//3)通过正常调用方法(参1,参2)
string arg3 = GetNormalMethod_3(); /*****通过反射调用类的方法*****/ //1)通过反射调用方法(无参)
string str1 = GetInvokeMethod_1();
//2)通过反射调用方法(参1)
string str2 = GetInvokeMethod_2();
//2)通过反射调用方法(参1,参2)
string str3 = GetInvokeMethod_3(); return View();
} /// <summary>
/// 正常调用类的方法
/// </summary>
/// <returns></returns>
public string GetNormalMethod_1() {
HomeService service = new HomeService();
//调用无参方法
string result = service.SayHello();
//输出调用信息
string strs = GetInvokeInfo("SayHello()", result);
return strs;
} /// <summary>
/// 正常调用类的方法(parm1)
/// </summary>
/// <returns></returns>
public string GetNormalMethod_2()
{
HomeService service = new HomeService();
//调用有参方法(name)
string result = service.SayHello("李天");
//输出调用信息
string strs = GetInvokeInfo("SayHello(string name)", result);
return strs;
} /// <summary>
/// 正常调用类的方法(parm1,parm2)
/// </summary>
/// <returns></returns>
public string GetNormalMethod_3()
{
HomeService service = new HomeService();
//调用有参方法(name,age)
string result = service.SayHello("李天", );
//输出调用信息
string strs = GetInvokeInfo("SayHello(string name,int age)", result);
return strs;
} /// <summary>
/// 通过反射调用类的方法(SayHello())
/// </summary>
public string GetInvokeMethod_1() { // 1.Load(命名空间名称),GetType(命名空间.类名)
Type type = Assembly.Load("StudyInvokeMethod").GetType("StudyInvokeMethod.HomeService");
//2.GetMethod(需要调用的方法名称)
MethodInfo method = type.GetMethod("SayHello", new Type[] { });
// 3.调用的实例化方法(非静态方法)需要创建类型的一个实例
object obj = Activator.CreateInstance(type);
//4.方法需要传入的参数
object[] parameters = new object[] { };
// 5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
// 相应地调用静态方法时,Invoke的第一个参数为null
string result = (string)method.Invoke(obj, parameters); //输出调用信息
string strs = GetInvokeInfo("SayHello()", result);
return strs;
} /// <summary>
/// 通过反射调用类的方法(SayHello(string name))
/// </summary>
public string GetInvokeMethod_2()
{
// 1.Load(命名空间名称),GetType(命名空间.类名)
Type type = Assembly.Load("StudyInvokeMethod").GetType("StudyInvokeMethod.HomeService");
//2.GetMethod(需要调用的方法名称)
MethodInfo method = type.GetMethod("SayHello", new Type[] { typeof(string) });
// 3.调用的实例化方法(非静态方法)需要创建类型的一个实例
object obj = Activator.CreateInstance(type);
//4.方法需要传入的参数
object[] parameters = new object[] { "李天"};
// 5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
// 相应地调用静态方法时,Invoke的第一个参数为null
string result = (string)method.Invoke(obj, parameters); //输出调用信息
string strs = GetInvokeInfo("SayHello(string name)", result);
return strs;
} /// <summary>
/// 通过反射调用类的方法(SayHello(string name,int age))
/// </summary>
public string GetInvokeMethod_3()
{
// 1.Load(命名空间名称),GetType(命名空间.类名)
Type type = Assembly.Load("StudyInvokeMethod").GetType("StudyInvokeMethod.HomeService");
//2.GetMethod(需要调用的方法名称)
MethodInfo method = type.GetMethod("SayHello", new Type[] { typeof(string),typeof(int) });
// 3.调用的实例化方法(非静态方法)需要创建类型的一个实例
object obj = Activator.CreateInstance(type);
//4.方法需要传入的参数
object[] parameters = new object[] { "李天",};
// 5.调用方法,如果调用的是一个静态方法,就不需要第3步(创建类型的实例)
// 相应地调用静态方法时,Invoke的第一个参数为null
string result = (string)method.Invoke(obj, parameters); //输出调用信息
string strs = GetInvokeInfo("SayHello(string name,int age)", result);
return strs;
} /// <summary>
/// 调用方法输出信息
/// </summary>
/// <param name="method">调用方法名</param>
/// <param name="str">返回信息</param>
/// <returns></returns>
public string GetInvokeInfo(string method, string str)
{
string result = string.Format("调用方法:{0},输出:{1}", method, str);
return result;
}
}
}

PS:

参考网址:https://blog.csdn.net/likekobe2012/article/details/41824285

C#如何通过反射调用类下的方法的更多相关文章

  1. C# 利用反射调用类下的方法

    namespace TestReflection { public partial class Form1 : Form { public Form1() { InitializeComponent( ...

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

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

  3. Java_通过反射调用类中的方法

    先上一个基本的封装: /** * 获取classType * * @param type * @param provinceCode * @param cityCode * @return * @th ...

  4. C#反射调用类的私有方法

    void Main() { var type = typeof(StockClass); type.Dump(); var fields=type.GetFields(BindingFlags.Ins ...

  5. Java中的静态方法和实例方法的调用的理解(不同的类下的方法调用)

    public class MethodCall { public static void main(String[] args) { Test.sayStatic(); Test test = new ...

  6. C#通过反射调用类及方法

    反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类).下面演示一下通过反射调用类及方法: 1.新建一个类,命名为:ReflectionHelper,代码如下: #region 创 ...

  7. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  8. Java 反射 调用私有域和方法(setAccessible)

    Java 反射 调用私有域和方法(setAccessible) @author ixenos AccessibleObject类 Method.Field和Constructor类共同继承了Acces ...

  9. [ 转载 ] Java基础10--关于Object类下所有方法的简单解析

    关于Object类下所有方法的简单解析 类Object是类层次结构的根类,是每一个类的父类,所有的对象包括数组,String,Integer等包装类,所以了解Object是很有必要的,话不多说,我们直 ...

随机推荐

  1. javaSE习题 第二章 基本数据类型和数组

    问答: 1.什么叫标识符,标识符的规则是什么? 用来标志类名,变量名,方法名,类型名,数组名,文件名的有效字符序列称为标识符. 规则:1.由字母,数字,下划线,美元组成.2.标识符第一个字符不能是数字 ...

  2. 【C#】 基于ArcFace 2.0—视频人脸识别Demo

    使用的虹软人脸识别技术 啥话不说,不用跪求,直接给下载地址:http://common.tenzont.com/comdll/arcface2demo.zip(话说附件的大小不限制,还是说我的文件太大 ...

  3. isA,小赋值大

    class Student:Person{ }; Student s; 1. Person p=s;  // 可以将具体的赋值给大的,指针也行. 2. Person * p=new Student; ...

  4. Python + Selenium WebDriver Api 知识回顾

    一直再用 Selenium WebDriver 但是用的都比较零散,也没有做过总结,今天借此机会,整理一下,方便大家使用时查阅 webDriver  的属性 ['CONTEXT_CHROME', 'C ...

  5. css sticker footer

    .detail position: fixed z-index: 100 top: 0 left: 0 width: 100% height: 100% overflow: auto .detail- ...

  6. Java 访问RabbitMQ

    一.概述 前面学过ActiveMQ.ActiveMQ主要是实现的JMS规范,而RabbitMQ就是AMQP的一个具体实现. RabbitMQ里面有几个概念:生产者.消费者.消息.交换器.路由键.队列. ...

  7. 使用jquery-form进行文件上传

    jquery.form.js是一个form插件,支持ajax表单提交和ajax上传. 使用时,需要在代码中添加如下: <script src="http://malsup.github ...

  8. codeforces590b//Chip 'n Dale Rescue Rangers//Codeforces Round #327 (Div. 1)

    题意:从一点到另一点,前t秒的风向与t秒后风向不同,问到另一点的最短时间 挺难的,做不出来,又参考了别人的代码.先得到终点指向起点的向量,设T秒钟能到.如果T>t则受风1作用t秒,风2作用T-t ...

  9. android------eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar

    更新了SDK后,在ecplise上运行项目时出现了一个问题. 一运行就提示这个错误:Your project contains error(s), please fix them before run ...

  10. 小程序获取openid 小程序授权

    小程序获取openid 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系. wx.login(Object object) 调用接口获取登录凭证(cod ...