【问题标题】:Using Reflection to set a static variable value before object's initialization?在对象初始化之前使用反射设置静态变量值?
【发布时间】:2011-01-13 07:08:07
【问题描述】:

是否可以在尚未初始化的对象上设置静态(私有)变量的值? SetValue 方法需要一个实例,但我希望有办法解决这个问题。

【问题讨论】:

    标签: c# reflection c#-2.0 system.reflection


    【解决方案1】:

    对于静态值,您可以为实例参数传递 null。

    var type = typeof(SomeClass);
    var field = type.GetField("SomeField", BindingFlags.NonPublic | BindingFlags.Static);
    field.SetValue(null, 42);
    

    【讨论】:

    • +1 令人着迷:我觉得这种技术有点可怕的是:如果有问题的字段是只读的:此代码在执行时不会导致运行时错误。
    • 如果有问题的字段是只读的,它就什么都不做吗?还是它无论如何都设置了值?这只是 .NET 3.5 吗?
    • +1。我认为对于私有静态,您需要一些 BindingFlags 作为 GetField 方法的第二个参数。 BindingFlags.Static | BindingFlags.NonPublic
    【解决方案2】:

    您能否创建一个公开的静态函数并使用它来设置您的私有静态变量?

    【讨论】:

    • 我猜这是针对@Chance 没有源代码的类型。
    • 是的,我不能乱用源代码,不幸的是,我被 2.0 阻止了扩展方法。不过谢谢!
    • 扩展方法不能访问私有数据。 msdn.microsoft.com/en-us/library/bb383977.aspx
    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多