我有以下抽象类
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)
因为那是Expression中包含的Property。
显然我不能foo.ChosenProperty.Method(Paramater)
,因为ChosenProperty
是Expression
类型的变量,但是选择foo
的任何属性的语法是什么已被Expression?
答案 0 :(得分: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; }
}
}