【问题标题】:Get the private field by properties with reflection C#通过反射 C# 的属性获取私有字段
【发布时间】:2011-10-06 05:33:42
【问题描述】:

在我的工作中,我使用 v2.0 项目。 我需要知道哪个是与每个属性相关的私有字段

class Foo {

private string _bar;
public string BigBar
{
    get { return _bar; }
}}

有人知道我如何用反射检查这种关系

【问题讨论】:

  • 这不能通过反射来完成。也许你不应该需要它。
  • public string Evil { get { return _foo + _bar; } }
  • public string MoreEvil { get { return rand.NextDouble() < .5 ? _foo : _bar; } }
  • @SLaks,第二个很简单,反射只需要有另一个 Random 实例,这将有助于猜测使用了哪个字段。

标签: c# .net reflection field private


【解决方案1】:

如果您正在寻找auto-like-properties 的支持字段,那么唯一的方法就是查看生成的IL,例如使用Mono.Cecil 之类的工具。

您必须寻找特定的 IL 模式,还必须检查支持字段是否仅在属性中使用,而在其他任何地方都没有。

模式将是为这段代码生成的 IL:

private string _foo;
public string Foo { get { return _foo; } set { _foo = value; } }

getset 是可选的,但必须至少有一个)

【讨论】:

    【解决方案2】:

    你需要一个反编译器来查看类的内部工作:

    Decompilers

    【讨论】:

      【解决方案3】:

      虽然您只能使用 Reflection for Auto-implemented 属性执行此操作,但请考虑使用此开源反编译库:http://wiki.sharpdevelop.net/ILSpy.ashx。你可以反编译相关的方法,看看他们做了什么。

      【讨论】:

        猜你喜欢
        • 2012-01-23
        • 2020-08-04
        • 1970-01-01
        • 2014-08-27
        • 1970-01-01
        • 2013-02-25
        • 1970-01-01
        • 2011-08-20
        • 2013-04-24
        相关资源
        最近更新 更多