Tag: reflection

在运行时加载汇编并创build类实例

我有一个集会。 在这个汇编中,我有一个类和接口。 我需要在运行时加载这个程序集,并且想创build这个类的一个对象,并且也想使用这个接口。 Assembly MyDALL = Assembly.Load("DALL"); // DALL is name of my dll Type MyLoadClass = MyDALL.GetType("DALL.LoadClass"); // LoadClass is my class object obj = Activator.CreateInstance(MyLoadClass); 这是我的代码。 怎么能改进?

GetProperties()返回接口inheritance层次结构的所有属性

假设以下假设的inheritance层次结构: public interface IA { int ID { get; set; } } public interface IB : IA { string Name { get; set; } } 使用reflection并进行以下调用: typeof(IB).GetProperties(BindingFlags.Public | BindingFlags.Instance) 只会产生接口IB的属性,即“ Name ”。 如果我们要对下面的代码进行类似的testing, public abstract class A { public int ID { get; set; } } public class B : A { public string Name […]

如何在Python中枚举对象的属性?

IC#我们通过反思来完成。 在Javascript中,它很简单: for(var propertyName in objectName) var currentPropertyValue = objectName[propertyName]; 如何在Python中做到这一点?

使用Case / Switch和GetType来确定对象

可能重复: C# – 有没有比这更好的替代“打开types”? 如果你想switch一个types的对象,最好的办法是什么? 代码片段 private int GetNodeType(NodeDTO node) { switch (node.GetType()) { case typeof(CasusNodeDTO): return 1; case typeof(BucketNodeDTO): return 3; case typeof(BranchNodeDTO): return 0; case typeof(LeafNodeDTO): return 2; default: return -1; } } 我知道这不是那种方式,但我想知道如何解决这个问题。 在这种情况下, if/else语句是否恰当? 或者你使用开关,并添加.ToString()的types?

如何find所有实现给定接口的类?

在给定的命名空间下,我有一组实现接口的类。 我们把它称为ISomething 。 我有另一个类(我们称之为CClass ),它知道ISomething但不知道实现该接口的类。 我希望该CClass查找所有的ISomething的实现,实例化它的一个实例并执行该方法。 有没有人有关于如何使用C#3.5做到这一点的想法?

使用reflection发现派生types

使用reflection,是否有可能发现从给定types派生的所有types? 据推测,范围将被限制在一个单一的大会。

获取方法参数的名称

在Java 6中 ,假设我有以下方法签名: public void makeSandwich(Bread slice1, Bread slice2, List<Filling> fillings, boolean mustard) 我想知道,在运行时,传递给slice2或任何其他参数的值,这里的重要一点是,我想通过参数名称获取值。 我知道如何使用getParameterTypes或getGenericParameterTypes获取参数types的列表。 理想情况下,我想获取参数名称而不是types的列表。 有没有办法做到这一点?

如何使用Javareflection调用超类方法

我有两个class。 public class A { public Object method() {…} } public class B extends A { @Override public Object method() {…} } 我有一个B的实例。如何从b调用A.method()? 基本上和从B调用super.method()的效果一样。 B b = new B(); Class<?> superclass = b.getClass().getSuperclass(); Method method = superclass.getMethod("method", ArrayUtils.EMPTY_CLASS_ARRAY); Object value = method.invoke(obj, ArrayUtils.EMPTY_OBJECT_ARRAY); 但是上面的代码仍然会调用B.method()

我如何获得我的自定义属性被应用的成员?

我在C#中创build一个自定义属性 ,我想根据属性是应用于方法还是属性做不同的事情。 起初,我将在自定义属性构造函数中执行new StackTrace().GetFrame(1).GetMethod()以查看称为属性构造函数的方法,但现在我不确定那会给我什么。 如果该属性应用于某个属性,该怎么办? GetMethod()会为该属性返回一个MethodBase实例吗? 是否有不同的方式获得在C#中应用了属性的成员? [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class MyCustomAttribute : Attribute 更新:好吧,我可能一直在问错误的问题。 从自定义属性类中,如何获取应用了我的自定义属性的成员(或包含成员的类)? Aaronaughtbuild议不要在堆栈中find应用了我的属性的类成员,但是如何从我的属性的构造函数中获取这些信息呢?

如何拦截具有标准java特性的方法调用(无AspectJ等)?

我想拦截所有的方法调用一些类MyClass能够对一些setter-invocations作出反应。 我试图使用dynamic代理,但据我所知,这只适用于实现一些接口的类。 但MyClass没有这样的接口。 除了实现一个包装类之外,还有其他的方式,把所有的调用委托给一个成员,这个成员是MyClass的一个实例,或者是使用AOP的另一个实例?