【问题标题】:How to get a getter of a property?如何获得属性的吸气剂?
【发布时间】:2010-07-23 06:27:58
【问题描述】:

我想获得一个属性的 getter,这样我就可以传递给一个需要 Func 的方法。现在我将 getter 提取到 Get 方法中,并在需要 getter 函数时使用此方法。

关于背景的几句话:我有一个有属性的 A 类,我有另一个 T 类,它跟踪 A(以及 B、C 类等)的一些属性。保持跟踪在这里意味着当 T 的对象被问及跟踪属性的当前值时,它应该给出这样的值。

一种方法可能是更改通知机制,但 A 类不知道跟踪什么 - 所以这是非常错误的方法。您必须重写所有可能被跟踪的类。此外,必须始终发送通知,即使跟踪器根本不会被询问值。

简单地传递一个如何读取值(属性的getter)的方法似乎更方便,并且跟踪器将在需要时使用它。没有开销,非常简单。

【问题讨论】:

    标签: c# properties


    【解决方案1】:

    编译的代码,还是反射?作为代表,您可以使用:

    Func<Foo, int> func = x => x.SomeValue;
    

    或跟踪特定的对象:

    Func<int> funct = () => someObj.SomeValue;
    

    使用反射你需要GetGetMethod()Delegate.CreateDelegate()

    【讨论】:

    • 这就是为什么我们都对 c# 中的 lambdas 发疯了;)
    【解决方案2】:
    var getter = typeof(DateTime).GetProperty("Now").GetGetMethod();
    var func = Delegate.CreateDelegate(getter, typeof(Func<DateTime>)) 
                   as Func<DateTime>;
    

    【讨论】:

      【解决方案3】:

      只是另一种变体:

      Func<int> getCurrentValue = delegate { return IntValue; };
      

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 2023-02-02
        • 2018-11-16
        • 2015-07-19
        相关资源
        最近更新 更多