2015-01-06 1 views

답변

0

이 동작을 제어하려면 속성을 사용해야합니다.

  • MulticastInheritance.None입니다. Aspect는 파생 클래스에 상속되지 않습니다.
  • MulticastInheritance.Strict 파생 클래스가 기본 클래스 멤버 (즉, 재정의 된 메서드)의 애스펙트를 상속하게합니다.
  • MulticastInheritance.Multicast은 파생 클래스가 파생 클래스에서 애스펙트를 지정한 것처럼 애스펙트를 완전히 상속합니다.

그런 다음 의 AttributeTargetMemberAttributes을 사용해야 속성을 적용해야하는 멤버를 지정할 수 있습니다. 귀하의 경우에는 AttributeTargetMemberAttributes = MulticastAttributes.Public이됩니다.

마지막으로 강제로 PostSharp가 기본 클래스 자체에 특성을 적용하지 않아야 할 경우 다른 속성 인스턴스에 AttributeExclude 속성을 사용하여 특정 상황에서 애스펙트를 비활성화 할 수 있습니다. 이 컴파일 타임 동작입니다

[MyAspect(AttributeInheritance = MulticastInheritance.Multicast, AttributeTargetMemberAttributes = MulticastAttributes.Public)] 
[MyAspect(AttributeExclude = true)] 
public class ClassA 
{ 
    //... 
} 

참고하고 모든에 PostSharp를 실행해야합니다 : "단지 주어진 클래스의 하위 클래스의 모든 공용 방법에"

그래서, 다음에 의해 만족 될 것이다 의도 된대로 작동하도록 기본 클래스에서 파생되는 프로젝트 PostSharp로 개선되지 않은 프로젝트의 클래스에서 파생 된 경우, 애스펙트 동작이 상속되지 않습니다.

+0

당신의 의견을 보내 주셔서 감사합니다. Daniel,하지만 적어도 내가 당신이 말한 것을 오해하겠습니다. 원하는 옵션을 얻었습니다. "주어진 클래스에서 상속 된 클래스에 정의 된 public 메소드에만 속성을 적용하십시오. * –

+0

@ gsc-frank 질문이 완전히 명확하지 않았습니다. 나는 그것의 의도 된 의미를 더 가깝게 (잘하면) 일치시키기 위해 나의 대답을 업데이트했다. –

관련 문제