javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

spring-mvc

reflection

javascript-objects

html5

analytics

node.js

performance

branch-prediction

git-commit

git-revert

.net-在C#中,表达API是否比反射更好

如今,我正在探索C#Expression API。 因此,我可以借助一些帮助来了解其工作原理,包括表达与反思之间的区别。 我还想了解表达式是否仅是语法糖,还是确实比反射性能更好?

好的例子以及到好的文章的链接将不胜感激。 :-)

trans by 2020-08-11T05:41:51Z

如何使用Java反射调用超类方法

我有两节课。

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()

trans by 2020-08-10T22:19:38Z

java-获取类路径中的所有类

如何在运行时获取CLASSPATH中所有可用类的列表?
在Eclipse IDE中,您可以通过按Ctrl + Shift + T来执行此操作。
Java中是否有任何方法可以完成它?

trans by 2020-08-10T15:24:46Z

CodeGo.net> C#-PropertyInfo:属性是一个索引器?

我有以下代码:

PropertyInfo[] originalProperties = myType.GetProperties();

我想从propInfo.Name == "Item"中排除所有索引器(myVar [“ key”]作为名为“ Item”的属性出现)。

正确的方法是什么?

排除所有不能选择propInfo.Name == "Item"的属性。

trans by 2020-08-10T14:39:20Z

反射-为什么C#中没有`fieldof`或`methodof`运算符?

它们的用法如下:

FieldInfo field = fieldof(string.Empty);
MethodInfo method1 = methodof(int.ToString);
MethodInfo method2 = methodof(int.ToString(IFormatProvider));

fieldof可以编译为IL,如下所示:

ldtoken <field>
call FieldInfo.GetFieldFromHandle

typeof可以编译为IL:

ldtoken <method>
call MethodBase.GetMethodFromHandle

每当使用typeof运算符时,您都会得到理想的“查找所有参考”结果。 不幸的是,一旦您进入字段或方法,您最终会受到讨厌的攻击。 我认为您可以执行以下操作...,也可以返回按名称获取字段。

public static FieldInfo fieldof<T>(Expression<Func<T>> expression)
{
    MemberExpression body = (MemberExpression)expression.Body;
    return (FieldInfo)body.Member;
}

public static MethodInfo methodof<T>(Expression<Func<T>> expression)
{
    MethodCallExpression body = (MethodCallExpression)expression.Body;
    return body.Method;
}

public static MethodInfo methodof(Expression<Action> expression)
{
    MethodCallExpression body = (MethodCallExpression)expression.Body;
    return body.Method;
}

public static void Test()
{
    FieldInfo field = fieldof(() => string.Empty);
    MethodInfo method1 = methodof(() => default(string).ToString());
    MethodInfo method2 = methodof(() => default(string).ToString(default(IFormatProvider)));
    MethodInfo method3 = methodof(() => default(List<int>).Add(default(int)));
}
trans by 2020-08-06T19:31:23Z

CodeGo.net>使用反射,我如何检测具有二传手的属性?

我有以下代码循环遍历一个对象并通过反射获取其所有属性:

foreach (var propertyInfo in typeof(TBase).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
    var oldValue = propertyInfo.GetValue(oldVersion, null);
}

如何检查仅查看带有“设置”的属性? (我想忽略只读值-只是“获取”。)

trans by 2020-08-06T10:46:30Z

动态加载Java类文件的方法

动态加载Java类文件的一种好方法是什么,以便编译到jar中的程序可以读取目录中的所有类文件并使用它们,以及如何编写这些文件以使它们具有必要的包名称 罐子里

trans by 2020-08-05T12:04:12Z

CodeGo.net>我如何调用一个方法与一个out参数?

我想要公开WebClient.DownloadDataInternal方法,如下所示:

[ComVisible(true)]
public class MyWebClient : WebClient
{
    private MethodInfo _DownloadDataInternal;

    public MyWebClient()
    {
        _DownloadDataInternal = typeof(WebClient).GetMethod("DownloadDataInternal", BindingFlags.NonPublic | BindingFlags.Instance);
    }

    public byte[] DownloadDataInternal(Uri address, out WebRequest request)
    {
        _DownloadDataInternal.Invoke(this, new object[] { address, out request });
    }

}

WebClient.DownloadDataInternal有一个out参数,我不知道如何调用它。救命!

trans by 2020-08-02T08:30:36Z

.net-当您在另一个变量中使用名称时,如何设置C#4动态对象的属性

我正在寻找一种使用仅在运行时已知的属性名称来修改ExpandoObject C#4.0对象上的属性的方法。

有没有办法做类似的事情(仅以ExpandoObject为例,这可以是实现IDynamicMetaObjectProvider的任何类):

string key = "TestKey";
dynamic e = new ExpandoObject();
e[key] = "value";

相当于:

dynamic e = new ExpandoObject();
e.TestKey = "value";

还是向前反思的唯一途径?

trans by 2020-07-30T05:22:49Z

java-使用反射设置私有字段值

我有2个班级:a_fieldChild

public class Father implements Serializable, JSONInterface {

    private String a_field;

    //setter and getter here

}

public class Child extends Father {
    //empty class
}

通过反射,我想在Child类中设置a_field

Class<?> clazz = Class.forName("Child");
Object cc = clazz.newInstance();

Field f1 = cc.getClass().getField("a_field");
f1.set(cc, "reflecting on life");
String str1 = (String) f1.get(cc.getClass());
System.out.println("field: " + str1);

但我有一个例外:

线程“主”中的异常java.lang.NoSuchFieldException:a_field

但是,如果我尝试:

Child child = new Child();
child.setA_field("123");

有用。

使用setter方法,我有同样的问题:

method = cc.getClass().getMethod("setA_field");
method.invoke(cc, new Object[] { "aaaaaaaaaaaaaa" });
trans by 2020-07-30T03:16:59Z

C#-获取实现特定开放通用类型的所有类型

如何获得实现特定开放通用类型的所有类型?

例如:

public interface IUserRepository : IRepository<User>

查找实现IRepository<>的所有类型。

public static IEnumerable<Type> GetAllTypesImplementingOpenGenericType(Type openGenericType, Assembly assembly)
{
  ...
}
trans by 2020-07-29T00:20:32Z

java-运行字符串中包含的一段代码

我在String中有一段Java代码。

String javaCode = "if(polishScreenHeight >= 200 && " +
    "polishScreenHeight <= 235 && polishScreenWidth >= 220) { }";

是否可以将此Java String转换为Java语句并运行它? 可能使用Java反射?

trans by 2020-07-26T08:44:11Z

为什么允许通过反射访问Java私有字段?

考虑这个例子:

import java.lang.reflect.Field;

public class Test {

    public static void main(String[] args) {
        C c = new C();
        try {
            Field f = C.class.getDeclaredField("a");
            f.setAccessible(true);
            Integer i = (Integer)f.get(c);
            System.out.println(i);
        } catch (Exception e) {}
    }
}

class C {
    private Integer a =6;
}

允许您通过反射来访问类的私有字段似乎是不合逻辑的。 为什么有这样的功能? 允许这样的访问不是“危险”吗?

trans by 2020-07-25T11:35:06Z

CodeGo.net>如何设置.NET异常obj的InnerException

在对象的构造函数中时,如何设置Exception对象的Exception属性? 这归结为查找和设置没有设置器的属性的后备字段。

顺便说一句:我已经看到了这个evain.net-使用Reflection使字段支持属性,但是如果可能的话,寻找非基于IL的解决方案。

Exception的构造函数是创建Exception类型的地方,因此我不能使用基类构造函数MyException() :base(...)等来调用它。

trans by 2020-07-24T17:05:09Z

Java:使用反射实例化枚举

假设您有一个文本文件,例如:

my_setting = ON
some_method = METHOD_A
verbosity = DEBUG
...

您希望相应地更新相应的对象:

Setting my_setting = ON;
Method some_method = METHOD_A;
Verbosity verbosity = DEBUG;
...

凡是不同种类的枚举。

我想有一个通用的方法来实例化枚举值。 也就是说,在运行时使用反射,而无需事先知道对象的枚举类型。

我会想到这样的事情:

for (ConfigLine line : lines)
{
   String[] tokens = line.string.split("=", 2);
   String name = tokens[0].trim();
   String value = tokens[1].trim();

   try
   {
      Field field = this.getClass().getDeclaredField(name);   
      if(field.getType().isEnum())
      {
         // doesn't work (cannot convert String to enum)
         field.set(this, value);
         // invalid code (some strange generics issue)
         field.set(this, Enum.valueOf(field.getType().getClass(), value));
      }
      else
      { /*...*/ }
   }
   catch //...
}

问题是:应该有什么呢? 给定其String表示形式,甚至可以实例化未知枚举吗?

trans by 2020-07-23T02:31:56Z

Rust如何实现反射?

Rust具有TypeId的特征,但是它也具有“不为不使用的产品付款”政策。 Rust如何实现反射?

我的猜测是Rust使用了惰性标记。 最初未分配每种类型,但是如果以后将该类型的实例传递给期望具有TypeId特征的函数,则会为该类型分配TypeId

或者,Rust在其实例可能传递给该函数的每种类型上都添加了TypeId? 我猜前者会很昂贵。

trans by 2020-07-20T10:12:36Z

C#-Web应用程序的GetEntryAssembly

Assembly.GetEntryAssembly()不适用于Web应用程序。

但是...我真的需要像这样的东西。我使用了一些在Web和非Web应用程序中都使用过的嵌套代码。

我当前的解决方案是浏览StackTrace以找到第一个被调用的程序集。

/// <summary>
/// Version of 'GetEntryAssembly' that works with web applications
/// </summary>
/// <returns>The entry assembly, or the first called assembly in a web application</returns>
public static Assembly GetEntyAssembly()
{
    // get the entry assembly
    var result = Assembly.GetEntryAssembly();

    // if none (ex: web application)
    if (result == null)
    {
        // current method
        MethodBase methodCurrent = null;
        // number of frames to skip
        int framestoSkip = 1;


        // loop until we cannot got further in the stacktrace
        do
        {
            // get the stack frame, skipping the given number of frames
            StackFrame stackFrame = new StackFrame(framestoSkip);
            // get the method
            methodCurrent = stackFrame.GetMethod();
            // if found
            if ((methodCurrent != null)
                // and if that method is not excluded from the stack trace
                && (methodCurrent.GetAttribute<ExcludeFromStackTraceAttribute>(false) == null))
            {
                // get its type
                var typeCurrent = methodCurrent.DeclaringType;
                // if valid
                if (typeCurrent != typeof (RuntimeMethodHandle))
                {
                    // get its assembly
                    var assembly = typeCurrent.Assembly;

                    // if valid
                    if (!assembly.GlobalAssemblyCache
                        && !assembly.IsDynamic
                        && (assembly.GetAttribute<System.CodeDom.Compiler.GeneratedCodeAttribute>() == null))
                    {
                        // then we found a valid assembly, get it as a candidate
                        result = assembly;
                    }
                }
            }

            // increase number of frames to skip
            framestoSkip++;
        } // while we have a working method
        while (methodCurrent != null);
    }
    return result;
}

为了确保组装符合我们的要求,我们有3个条件:

  • 该程序集不在GAC中
  • 装配没有动态
  • 程序集没有生成(以避免临时的asp.net文件

我遇到的最后一个问题是在单独的程序集中定义基本页面时。(我使用ASP.Net MVC,但与ASP.Net相同)。在这种情况下,返回的是单独的程序集,而不是包含页面的程序集。

我现在正在寻找的是:

1)我的装配验证条件是否足够? (我可能已经忘记了情况)

2)有没有一种方法可以从ASP.Net临时文件夹中给定的代码生成程序集获取有关包含该Page / View的项目的信息?(我认为不是,但是谁知道...)

trans by 2020-07-14T01:31:44Z

CodeGo.net>如何测试MethodInfo.ReturnType是否为System.Void类型?

使用反射获取MethodInfo,我想测试返回的类型是否为typeof System.Void。

测试是否是System.Int32正常

 myMethodInfo.ReturnType == typeof(System.Int32)

 myMethodInfo.ReturnType == typeof(System.Void)

不编译? 目前,我正在测试名称的字符串表示形式是否为“ System.Void”,这似乎非常错误。

trans by 2020-07-10T18:44:41Z

反射-从字符串生成类并在Scala 2.10中实例化它

在Scala 2.10中,如何稍后通过字符串(可能使用Toolbox api)从字符串生成一个类,以使用Scala的反射进行实例化?

trans by 2020-07-10T05:34:06Z

c#-抽象属性上的自定义属性的继承

我有一个自定义属性,我想将其应用于基本抽象类,以便在以HTML显示项目时可以跳过用户不需要查看的元素。 似乎覆盖基类的属性没有继承属性。

覆盖基本属性(抽象或虚拟)是否会破坏放置在原始属性上的属性?

从属性类定义

[AttributeUsage(AttributeTargets.Property,
                Inherited = true,
                AllowMultiple = false)]
public class NoHtmlOutput : Attribute
{
}

从抽象类定义

[NoHtmlOutput]
public abstract Guid UniqueID { get; set; }

从具体的类定义

public override Guid UniqueID{ get{ return MasterId;} set{MasterId = value;}}

从类检查属性

        Type t = o.GetType();
        foreach (PropertyInfo pi in t.GetProperties())
        {
            if (pi.GetCustomAttributes(typeof(NoHtmlOutput), true).Length == 1)
                continue;
            // processing logic goes here
        }
trans by 2020-07-10T03:51:10Z

1 2 3 4 5 6 7 8 9 10 11 12 13 下一页 共13页