使用反射来调用一个静态方法时,遇到了错误的返回值?

我有2种称为EffectEffectMethods这是静态类我打电话的方法:

public class EffectMethods { public static EffectResult Blend (Effect effect) { bool success = true; return new EffectResult ( effect.Type, success ); } }

我发现用正确的方法:

Type.GetMethods ( BindingFlags.Public | BindingFlags.Static );

并筛选出正确的。

但是,当我把它称为:

( EffectResult ) method.Invoke ( null, new object [ ] { this } ); public class Effect { public EffectResult Apply() { var methods = Type.GetMethods ( BindingFlags.Public | BindingFlags.Static ); var method = methods.First ( ... ); // This result value is now different (success = false) return ( EffectResult ) method.Invoke ( null, new object [ ] { this } ); } }

我得到错误的结果。 在这里, this是当前实例Effect ,因为它是一个包含反射的呼叫类型。

基本上我计算出的一个值是返回操作是否成功的标志。 但这个值被设置为在代码真实的,但该方法通过反射返回后的结果是不同的。

我做这错了吗? 有我丢失的东西? 我可以清楚地看到该值是方法内,但在电话会议上现场真实的,它不同的显示出来。

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

我不明白为什么它应该返回“坏值”。 你没有提供完整的代码,所以我只能给你我的两个猜测。

  1. 在构造函数中EffectResult ,你忘了设定的success参数属性,或者属性的实现是错误的。
  2. Type使用获取的方法,由比其他EffectMethods或者你有你的AppDomain不同的实现重复的组件。 检查加载的模块。

你可以发布更多的代码? 我猜一些基于你显示代码的定义。 用我猜定义我没有问题,当然我假设,只有一个公共静态方法和一些基本的定义,等等。

将看到您的实际代码,不过,这些类或骨架更有帮助。 使用这些虽然,它的工作原理。

using System;
using System.Reflection;

public enum EffectType
{
A,
B
}

public class Effect
{
public EffectType Type { get; set; }
}

public class EffectResult
{
public EffectType Type { get; set; }
public bool Success { get; set; }

public EffectResult(EffectType type, bool success)
{
Type = type;
Success = success;
}
}

public class EffectMethods
{
public static EffectResult Blend(Effect effect)
{
bool success = true;
return new EffectResult(effect.Type, success);
}
}

public static class Program
{
public static void Main()
{
var methods = typeof (EffectMethods).GetMethods(BindingFlags.Public | BindingFlags.Static);

var result = methods[0].Invoke(null, new object[] { new Effect { Type = EffectType.A } });

Console.WriteLine(result);
}
}

分类:C# 时间:2012-01-01 人气:1
本文关键词: .NET,C#,反思
分享到:

相关文章

  • 扩大南反思在Django 2012-01-14

    我有一个自定义应用程序,我想开始使用与南部. 它采用了FK的关联从另一个应用程序博客条目(专有的,不是我写的). 问题是,当我尝试运行初始schemamigration我得到一个错误,一些博客条目应用的领域不能被冻结. 不能被冷冻的字段是使用延伸离开所述芯部字段的自定义字段的字段. ./manage.py schemamigration free --initial 我读了南方的文档上延伸反省,但我不知道在哪里/如何界定反思规则. 在此先感谢您的任何建议. --------------解决方案-

  • 在Android浏览器使用CSS渐变的反思 2012-01-27

    我有一些CSS来显示它使用WebKit的梯度淡出元素上的反映: .foo { -webkit-box-reflect: below 0 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0)), to(rgba(255, 255, 255, 0.5)), color-stop(0.7, transparent)); } 在支持的浏览器-webkit-箱反映,如铬,这显示预期逐渐淡出元素的反映. 在不支

  • 为什么C ++没有反思? 2012-01-27

    这是一个有些奇怪的问题. 我的目标是理解语言的设计决策,并确定反射的可能性,在C ++中. 为什么C ++语言委员会没有去实现的语言实现写照吗? 是反映在不(如Java)的虚拟机上运行的语言太难了? 如果一个人实施反射对于C ++,会是怎样的挑战? 我想反映的用途是众所周知的:编辑人员可以更容易地编写,程序代码会更小,可以为单元测试等生成嘲弄. 但是,这将是巨大的,如果你能在反射的使用发表意见了. --------------解决方案------------- 有几个问题与反思在C ++中. 这

  • 反思 - 获取的lambda表达式中的方法调用列表 2012-02-01

    我试图找到一种方式来获得的方法的lambda表达式内部在C#3.5调用列表. 例如,在下面的代码,我想方法LookAtThis(行动)来分析lambda表达式的内容. 换句话说,我想LookAtThis回到我创建的MethodInfo的对象. LookAtThis(() => Create(null, 0)); 可能吗? 谢谢! --------------解决方案------------- 这是很容易,只要你使用Expression<Action>而不是Action . 对于完整的代码

  • 反思:如何获得一个通用的方法是什么? 2012-02-04

    可能的重复: 如何使用反射来调用泛型方法? 选择右泛型方法与思考 你好 比方说,我有以下两个类中的两个方法: public void MyMethod(object val) {} public void MyMethod<T>(T val) {} 与反思,我能得到这样的第一种方法: Type[] typeArray = new Type[1]; typeArray.SetValue(typeof(object), 1); var myMethod = myInstance.GetType()

  • 是否有可能与反思找到从一个类中的所有方法调用到另一个? 2012-02-08

    我想找到一个类中的所有方法调用这些都对另一个类进行. 例如: 如果class1的调用class2.Foo(),但不class2.Bar(),那么我想知道这件事情. 几乎像耦合分析. 与反思这可能吗? --------------解决方案------------- 这是可能的,因为它是由多个的IDE(至少用于Java)来实现. 在任何情况下,你可能有部分erreneous分析. 这是非常困难的,以确定在编译时这方法被称为在方法覆盖的派生类的存在. 没有,这是不可能用反射. 您需要静态代码分析来计算

  • 如何在迭代反思列表 2012-02-12

    我有叫学生一个属性是类型的List<Student> . 在反思,我可以让学生属性的值. 现在的问题是如何迭代学生名单. 我需要检查StudentID [某些值]无论是收藏. var collection = studentPro.GetValue(studentObj,null); //I need to iterate like this, foreach(var item in collection) { if(item.StudentID == 33) //Do stuff } 请帮帮

  • 动态郎。 运行VS反思 2012-02-15

    我打算使用动态关键字为我的新项目. 但步进之前,我想知道在使用动态关键字在反思得失. 继那里的利弊,我可以在尊重动态关键字找到: 读\维护的代码. 更少行代码. 虽然使用动态关键字相关联的底片,我来听很喜欢: 影响应用程序的性能. 动态关键字内部被反射的包装. 动态类型可能会变成了难以发现的故障温床. 影响与以前版本的.NET互操作. 请大家帮我上我碰到的利弊是否明智与否? --------------解决方案------------- 读\维护的代码 在我执政经验肯定是真的. 更少行代码. 不

  • 反思阶。 调用的方法? 2012-02-20

    Class<?> clazz = loadClass( "Test" ); Method printSomething = clazz.getDeclaredMethod( "printSomething" ); printSomething.invoke( clazz ); 我试图找出如何在斯卡拉做到这一点. 我猜我失去了一些东西简单使用Scala处理反射的方式. val clazz = loadClass("Test") val

  • 如何慢是反思 2012-02-21

    我最近创建了一个接口层从业务逻辑层区分DataAccessProvider. 通过这种方法,每当我们想通过在Web / App.config的变化值,我们可以改变我们的选择DataAccessProvider的. (更多详细信息可在需要时提供). 总之,要做到这一点,我们使用反射来实现我们的DataProvider类上,我们可以工作. /// <summary> /// The constructor will create a new provider with the use of ref

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

55228885 版权所有 京ICP备15002868号

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