2016-08-21 5 views
2

기본 클래스 메서드에 전달할 클래스 (또는 기본 클래스)의 메서드를 전달할 수 있어야합니다 (더 많은 작업을 수행해야하므로).표현식을 통해 매개 변수로 메서드를 전달하십시오.

나는 다음과 같은 가능성에 대해 알고있다 : 나의 기본 클래스에서 나는 public void Call(Action action)이라는 메쏘드를 가지고 있는데, 단지 action()을 호출 할 것이고 다른 것들을 할 것이다.

하지만 이제는이 방법으로 모든 것을 넣을 수 있습니다. Call(() => string.Format("Some {0}, "text)); 그러나 나는 단지 자신의 유형이나 기본 유형의 메소드 만 허용하려고합니다.

나는 public void Call(Expression<Func<MyClassType, Action>> expressionToAction)과 같은 것에 대해 생각하지만 올바른 지적을받지 못했습니다.

이것도 가능합니까? expression-param을 사용하면 메서드가 Action을 반환해야한다는 오류가 발생합니다. 이는 내가 원하는 바가 전혀 아닙니다.

+0

하위 클래스의 구체적인 구현에 의해 무시되는 기본 클래스의 간단한 가상 메서드는 어떻습니까? – Tomer

+1

'Func '는 반환 된'Action'에 대해 아무 것도 보장하지 않습니다. 실제로 달성하려는 것은 무엇입니까? 왜 당신이 이것을하고 싶은지에 대한 구체적인 예를 제시한다면, 아마도 이것을하는 더 좋은 방법이있을 것입니다. – Groo

답변

1

컴파일 타임에 "이 클래스의 메서드 만"을 구현할 수 없습니다. 제네릭 형식이 아닌 제네릭 형식에 대해서는 그렇게 할 수있는 제한이 없습니다.

실행 시간 검사이면 충분합니다. 표현식을 전달하고 (ActionFunc-이 아님) Get the name of a method using an expression과 유사한 표현식의 본문을 검사하십시오.