如何通过它的“名字”调用一个方法?

什么是叫的名字某种方法,如“方法一”的方式,如果我有一个Object ,它的Type

我想要做这样的事情:

Object o; Type t; // At this point I know, that 'o' actually has // 't' as it's type. // And I know that 't' definitely has a public method 'Method1'. // So, I want to do something like: Reflection.CallMethodByName(o, "Method1");

这是不知何故可能吗?我不知道,这将是缓慢的,它的不方便,但不幸的是我没有其他的方式在我的情况来实现这一点。

--------------解决方案-------------

如果混凝土方法名在运行时才知道,你不能使用动态的,需要使用这样的事情:

t.GetMethod("Method1").Invoke(o, null);

这是假设,即Method1没有参数。 如果是这样,你需要使用的重载之一GetMethod并传递参数作为第二个参数Invoke

你可以使用:

// Use BindingFlags for non-public methods etc
MethodInfo method = t.GetMethod("Method1");

// null means "no arguments". You can pass an object[] with arguments.
method.Invoke(o, null);

MethodBase.Invoke文档的更多信息-例如,传递参数。

斯蒂芬的方法使用dynamic可能会更快一些(绝对更易于阅读)如果你使用C#4,你知道在编译时的方法名。

(如果可能的话,这将是更好的,以使参与实现一个众所周知的接口代替,当然的类型。)

最简单的方法:

dynamic myObject = o;
myObject.Method1();

分类:C# 时间:2012-01-01 人气:0
本文关键词: 反思,对象
分享到:

相关文章

  • Objective-C的反思对象的属性 2012-10-29

    是否有可能以编程方式获得在Objective-C对象的属性,而无需使用运行时的方法呢?我只问,因为它似乎没有必要在运行时检查它,当它不会发生变化. 我想的东西,这样的效果: MyObject *foo = [[MyObject alloc] init]; NSDictionary *propertiesNamesAndValues = [foo getAllProperties]; 目前我的解决方案如下: id currentClass = [MyObject class]; NSString

  • 对象创建的“新”的关键字,并与反射创建 2012-04-14

    我才知道,使用反射,我们可以创建对象,而不使用"新"的关键字. 所以我想知道有没有在其中任何分歧或任何特定情况下使用反射. 因为到现在为止,我没有创建或看到任何创造与反思对象的代码. 为什么要采用"新"变得如此使用和反思不是. --------------解决方案------------- 只有当你要实例,您可以根据它的名字类型(字符串),或者你没有在编译时获得一个类型(例如,一个插件),你会使用反射. 你不希望使用它代替new实例化类型在正常条件下. 为什么要采用

  • ASP.NET MVC问题与使用反射创建的对象的默认模型绑定 2013-08-02

    我有一个奇怪的问题,在ASP.NET MVC有没有更新的UpdateModel对象时通过了的FormCollection. 的UpdateModel没有正确出现时,正在更新是通过反射创建对象是工作. 场景:我有大约有50个查找表的应用程序 - 每一个包含完全相同的架构,包括像ID,标题,描述,isactive和createdon典型领域. 而不是建立50个看法,我想有一个单一的视图,它可以从所有的查找表中显示的数据. 我创建了一个名为IReferenceEntity接口,并在每个波苏斯的代表我的

  • 使用Canvas VS垂直框/ HBox中明显的弯曲3的性能提升? 2012-03-12

    有人告诉我,铺设了孩子的位置时,使用Canvas与HBox中或VBox中时,有性能的提高. 其结果是,一些我们的组件已经转换到使用画布. 不过,现在有正在增加的代码来计算的一些基于关闭其他孩子的宽度和高度的子元素的x和y定位. 是否值得使用画布,如果代码需要添加,以确定孩子的坐标/位置,以提高性能? 有没有更好的方法或技术可应不仅仅是减少UI组件的增加数量并指定定位绝对练过其他? --------------解决方案------------- 有很多的中间落的道路的技术,其中之一是使用渲染型组件

  • MVC的一个好模型类,跟踪属性 2012-04-11

    这里是我model_users类("模特"它扩展了没有任何东西-仍然试图在得到这个准备,然后提炼出与其他车型使用的常用功能工作), Database::query刚刚返回mysql_fetch_assoc()的结果: class Model_User extends Model { private static $_table = 'users'; public function __construct($properties = array()) { parent::__constr

  • 获取与org.refelections注释类的方法 2013-02-07

    我在我的项目中使用org.reflections(http://code.google.com/p/reflections/)用于加载类具有一定的注解. 现在,我有课,我需要得到与我使自己注释的所有方法. 但是,当我创建的反思对象,它要求只是为包名,所以如果我会用getMethodsAnnotatedWith方法,它会获得给定包中的类的所有方法,但我想从我的类方法. 我该怎么办呢? --------------解决方案------------- 这里是你可以做什么: final Class<?>

  • 为什么这个类可以跟踪弱引用? 2013-06-01

    我试图去似乎是在客户的VB.NET ASP.NET应用程序的内存泄漏的底部(我们没有写代码). 有两件事情跳出我: 他们有与实例化时运行该代码在构造一个数据访问类数据访问组件: public SqlServer(string connString) { List<WeakReference> list = __ENCList; lock (list) { __ENCList.Add(new WeakReference(this)); } // misc other tasks of no fu

  • 建模“方法”作为反映资源违反REST风格? 2013-10-10

    我是新来休息,可以很好地推动/过境限制... 假设我们有典型的订货举例: GET /Order/12345 现在我想发布一个反映资源描述的属性,方法,关系术语"订单式". GET /Reflection/Type/Order 除其他事项外,得到的答复可能包含URI类型为"订单"的方法"富"的反思对象表示 /Reflection/Type/Order/Method/foo 接下来,我们可以张贴到URI使用/电话/后的方法...如果该方法需要的参数,

  • 如何获取类的名字 2014-03-26

    好吧,我有以下结构. 基本上是一个插件架构 // assembly 1 - Base Class which contains the contract public class BaseEntity { public string MyName() { // figure out the name of the deriving class // perhaps via reflection } } // assembly 2 - contains plugins based on the B

  • Python中的Perl程序员 2014-07-24

    我是一个有经验的Perl的开发具有一定程度的经验和/或熟悉其他语言(工作经验C / C ++,办学经验与Java和计划,并与其他许多人通过熟悉). 我可能需要得到在Python做了一些网站的工作(最直接的涉及到谷歌的App Engine). 因此,我想问问SO主宰了如何更好地学习Python的人谁从Perl背景的很好的参考(如重点将放在两个,如何差异翻译的perl idiomatics成Python idiomatics,而不是以通用的Python参考). 东西也集中于Web开发,甚至更好. 我

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 3.024 (s). 10 q(s)