c#输入方法名来调用方法(反射)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace zhiXing
{
class Program
{
static void Main(string[] args)
{
//方法1
/*
Type t = typeof(TestA);
MethodInfo mt = t.GetMethod("My");
TestA ta = new TestA();
string str = (string)mt.Invoke(ta, new object[] { 5 });
*/ //方法2
//加载程序集
Assembly s = Assembly.Load("zhiXing");
//得到类
Type tpe = s.GetType("zhiXing.TestA");
//得到方法
MethodInfo method = tpe.GetMethod("My");
//安全判断
{
//获取需要传入的参数
ParameterInfo[] parms = method.GetParameters();
//这里是判断参数类型
foreach (ParameterInfo ss in parms)
{
if (ss.ParameterType == typeof(int))
{
Console.WriteLine("参数类型匹配");
}
else
{
Console.WriteLine("参数类型不匹配");
}
}
}
//获取 类的对象
object obj = s.CreateInstance("zhiXing.TestA");
//调用
method.Invoke(obj, new object[] { }); }
} public class TestA
{
public void My(int a)
{
Console.WriteLine("哈哈哈哈哈" + a);
Console.ReadKey();
}
} }
=================================================================================================
方法1其实已经实现了,在一个自己的类中,输入自己的方法名来执行函数
实例
public class Execute : MonoBehaviour {
// Use this for initialization
void Start () {
Type t = typeof(Execute);
//获取共有方法
MethodInfo mt = t.GetMethod("My");
//获取私有方法, BindingFlags类型枚举,BindingFlags.NonPublic | BindingFlags.Instance 组合才能获取到private私有方法,
//MethodInfo mt = t.GetMethod("My", BindingFlags.NonPublic | BindingFlags.Instance);
//若公有和私有都要的话 BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public
string str = (string)mt.Invoke(this, new object[] { });
}
// Update is called once per frame
void Update () {
}
public void My(int a)
{
Debug.Log("哈哈哈");
}
}
【反射的官方中文文档】
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/reflection
有个最简单的办法: Invoke("mothodName", 0)
c#输入方法名来调用方法(反射)的更多相关文章
- Lua中“.”调用方法与“:”调用方法的区别
Lua中“.”调用方法与“:”调用方法的区别: ...
- java反射拼接方法名动态执行方法
近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的.但是每个code确实对应一个方法的. code的值有很多个,自己又不想做ifelse或者s ...
- Eclipse创建新项目时无法输入项目名的解决方法
放假耍了那么久,也是该收心忙活了. 今天打开Eclipse新建项目时,发生了一个很奇怪的情况,就是在下面这个位置的输入框无法输入. 经过百度之后,发现解决方案是(原地址点我) Eclipse图标右键 ...
- JS访问或设置cookie的方法+跨域调用方法
无意中从163网站获取的JS访问或设置cookie的方法,Log到日志上以防遗忘 //COOKIE功能检查function fCheckCookie(){ if(!navigator.cooki ...
- C# 通过方法的字符串名动态调用方法 反射实现
通过字符串执行方法,在可能会调用不同方法时对不同方法进行调用 以下为实例: public class ABC { string str = "通过反射执行的方法"; //Class ...
- 转:.NET获取当前方法名或调用此方法的方法名
Introduction Before .NET, we were always looking for a way to log current method name in a log file ...
- java根据方法名动态调用invoke方法!
public class Activity { public void deal(String name, long id) { System.out.println(name + id + &quo ...
- Spark Pipe使用方法(外部程序调用方法)
写在前面: 1.我们使用的是Hadoop2.2.0,Spark 1.0. 2.这里使用的样例是经典的求pai程序来演示这个开发过程. 3.我们暂时使用java程序来开发,按照需要后面改用scala来开 ...
- aspx反射调用方法
string name = base.Request["action"]; ]); if (obj2 != null) { s = obj2.ToString(); } 传入方法名 ...
随机推荐
- C# 真正完美的 汉字转拼音
网上有很多说自己整理的汉字转拼音是完美的,但使用后才发现都是半吊的瓶子,问题多多. 常见的生僻字,或多音字识别,转换后简直让人感觉可怕. 主流的转换有三种:hash匹配,Npinyin,微软PinYi ...
- XML在C#与Unity3D中的实战运用
一.xml文件是什么? XML是指可扩展标记语言,英文:Extensible Markup Language的缩写. 二.xml文件有什么用? 用来传输和存储数据,比如网络通信,本地配置文件等. 三. ...
- WM_QUERYENDSESSION与WM_ENDSESSION
此文已由作者王荣涛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 首先XP系统和Vista以后的系统,这两个消息的处理方式是不同的. XP系统 系统发送WM_QUERYEND ...
- 【kudu pk parquet】runtime filter实践
已经有好一阵子没有写博文了,今天给大家带来一篇最近一段时间开发相关的文章:在impala和kudu上支持runtime filter. 大家搜索下实践者社区,可以发现前面已经有好几位同学写了这个主题的 ...
- (一)用C或C ++扩展(翻译)
用C或C ++扩展 如果你知道如何用C语言编程,那么为Python添加新的内置模块是很容易的.这种扩展模块可以做两件不能直接在Python中完成的事情:它们可以实现新的内置对象类型,以及调用C库函数和 ...
- 强制所有网页链接在同一页面打开或者在TabControl中弹出新窗口
IEwebbrowser中老生常谈的话题. 一般的解决都是通过 // webBrowser.Navigating += WebBrowser_Navigating; 注册转跳前事件 private v ...
- day02.2-列表内置方法
列表——list的定义:test = [1,12,9,"age",["zizai","jiapu"],"alex"] 特 ...
- php代码审计6审计xss漏洞
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的html代码,从而盗取用户资料,利用用户身份进行某种动作或者对 ...
- php代码审计4审计代码执行漏洞
代码执行漏洞代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行,当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,造成 ...
- CF1137E. Train Car Selection(可删堆)
题面 三个操作 1.在当前数列最左端加入\(k\)个初始为\(0\)的数 2.在当前数列最右端加入\(k\)个初始为\(0\)的数 3.将当前数列从左到右第\(i\)个数加上\(b+(i-1)k(b& ...