【问题标题】:Access { get set } property methods, WITHOUT reflection访问 { get set } 属性方法,无需反射
【发布时间】:2013-10-23 00:50:48
【问题描述】:

我希望能够访问属性的void set_PropertyName(var value)var get_Property() 方法。

有没有办法做到这一点没有反射? 并且没有得到Compiler Error CS0571

编辑 没有反射我的意思是没有反射的开销(不仅仅是编写代码),因为这是需要运行很多次的代码,我希望它没有反射的开销。 不幸的是,动态也使用了反射。

这似乎在 c++.net 中是可能的,但在其他语言中却不是(虽然我无法判断,因为我的 C++ 安装已经被塞满了)。

感谢您的回复。

【问题讨论】:

  • 或许dynamic dynamicObject = notSoDynamicObject; int z = dynamicObject.get_Property();
  • 你想做什么? (在运行时替换实现,动态调用属性,检查类型或其他完全?)
  • @ta.speot.is 我确实尝试过,但不幸的是它没有用。另外,我相当肯定动态在幕后使用反射。
  • * 因为这是需要运行很多次的代码,所以我希望它没有反射开销。不幸的是,动态也使用了反射。*我认为那些编译的表达式是你想要的。假设属性没有改变(即您可能有 10 个属性需要调用 10,000 次,而不是 100,000 个属性需要调用一次)

标签: .net


【解决方案1】:

是的,如果您使用 Microsoft.VisualBasic 命名空间中提供的 callbyname,则可以这样做

前;

using System;
using Microsoft.VisualBasic;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var test = new Test();
            Microsoft.VisualBasic.Interaction.CallByName(test, "property" ,CallType.Set, 1);
            Console.WriteLine(Microsoft.VisualBasic.Interaction.CallByName(test, "property", CallType.Get));
            Console.ReadKey(true);
        }
    }

    public class Test
    {
        public int property { get; set; }
    }
}

【讨论】:

  • @MauricioScheffer ,在幕后,是的,但是......你不必做所有的“工作”
  • 我觉得 OP 在指定 reflection 时不够清楚,如 Without System.Reflectionwithout using reflection
  • 是的,我的意思是不调用开销反射,而不是实际反射本身。
  • @ta.speot.is 谢谢我不知道 Expression 的,它仍然不会给我在这个特定实例中我正在寻找的东西,它们仍然很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2020-07-17
  • 2019-05-07
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
相关资源
最近更新 更多