2

我有以下抽象类

abstract public class FooActivator<T> where T : class
{
    protected static Expression<Func<Foo, Bar<T>>> ChosenProperty

    public void Activate(T Paramater)
    {
         using (var foo = new Foo)
         {
            foo.ChosenProperty.Method(Paramater) //Obviously wrong, How do you do this?
         }
    }
}

想法是我可以继承这个基类,分配一个新值ChosenProperty以告诉Activate哪个属性调用该方法。

Public Class MyClassFooActivator : FooActivator<MyClass>
{
    new static Expression<Func<Foo, Bar<MyClass>>> ChosenProperty = x => x.PropertyOfTypeBarMyClass
}

现在Activate(MyClass Paramater)可以调用了,它会调用它

foo.PropertyOfTypeBarMyClass.Method(Paramater)

因为那是表达式中包含的属性。

显然我不能这样做foo.ChosenProperty.Method(Paramater),因为ChosenProperty是类型的变量,但是选择表达式Expression选择的任何属性的语法是什么?foo

4

1 回答 1

3

我认为您正在寻找的可能是这样的:

abstract class FooActivator<T> where T : class
{
    protected abstract Func<Foo, Bar<T>> ChosenProperty { get; }

    public void Activate(T param)
    {
        var foo = new Foo();
        ChosenProperty(foo).Method(param);
    }
}

class MyClassFooActivator : FooActivator<MyClass>
{
    protected override Func<Foo, Bar<MyClass>> ChosenProperty
    {
        get { return x => x.SomeBarMyClassProperty; }
    }
}
于 2013-10-10T16:59:53.973 回答