2013-10-10 4 views
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? 
     } 
    } 
} 
아이디어는 내가이 기본 클래스를 상속 할 재산 Activate에게 위해 ChosenProperty에 새 값을 할당 할 수 있다는 것입니다

on 메소드를 호출하십시오.

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

지금 Activate(MyClass Paramater) 호출 할 준비가 된 것이며 그 식에 포함 된 속성 때문에

foo.PropertyOfTypeBarMyClass.Method(Paramater) 

를 사용하여 호출합니다. ChosenProperty 유형 Expression의 변수가 있지만, 무엇 식에 의해 선택되어 foo의 어떤 속성을 선택하는 구문 것이기 때문에

분명히 나는, foo.ChosenProperty.Method(Paramater) 할 수없는 이유는 무엇입니까?

+0

당신이 속성은 공개하지 정적 이후 인스턴스 수준에있을 필요가 ChosenProperty에 액세스하는 방법. – terrybozzio

+0

나는 이것이 당신이해야 할 것보다 더 복잡하게 생각한다고 생각합니다. 당신이 일반적으로 달성하고자하는 것이 무엇인지 당신이 말해 줄까요? 관련 클래스 이름도 도움이됩니다. –

+0

여기를보십시오 http://stackoverflow.com/questions/10193453/how-can-i-pass-a-property-in-via-a-lambda-expression?rq=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; } 
    } 
} 
+0

예! 이것은 내가 찾고 있었던 바로 그 것이다. 'Expression'을 버리고'Func' 만 사용하면됩니다. 고맙습니다! – JHixson

관련 문제