2013-10-22 10 views
3

이 같은 C#에서 일반적인 데코레이터 클래스를 구현하는 방법을 방법 (그것을인가?)가 없기 때문에 궁금 :이 같은일반 실내 장식

public class Decorator<TDecoratorIterface> : TDecoratorInterface 
{ 
    public TDecoratorInterface Component {get; private set;} 

    protected Decorator(TDecoratorInterface component) 
    { 
     Component = component; 
    } 
} 

사용 :

public interface IDogDecorator 
{ 
    void Bark(); 
} 

public class Dog : IDogDecorator 
{ 
    public void Bark() 
    { 
     Console.Write("I am a dog"); 
    } 
} 

public class StinkingDog : Decorator<IDogDecorator> 
{ 
    public StinkingDog(IDogDecorator dog):base(dog) 
    { 
    } 

    public void Bark() 
    { 
     Component.Bark(); 
     Console.WriteLine(" and I stink"); 
    } 
} 

수는 PostSharp 또는 .NET의 다른 AOP 프레임 워크를 통해 관리 할 수 ​​있습니까? 답 이리저리

감사, 나는 어떤 성공하지 이러한 구조를 만들려고 반나절 동안, 그래서 어떤 도움 appreciatted됩니다 :) C 번호는 허용하지 않는

답변

4

는,이 구조에 직접 해당하는 없습니다 동적 인 유형의 기본 클래스. 제네릭 형식은 사용 시간이 아니라 컴파일 타임에 완전히 정의되어야합니다.

여러 가지 가능한 방법이 있습니다. 위의 예에서 StinkingDog는 IDogDecorator 인터페이스를 구현해야합니다. 그래서 거기에 지정하십시오. 당신은 어쨌든 전화를 착신 전환하고 있습니다.

public class StinkingDog : Decorator<IDogDecorator>, IDogDecorator 

아마 정확히 (즉 Rhino.Mocks 실제로 모의 객체 이런 식으로 만드는) 원하는 일을 프레임 워크가있을 것이지만, 생산 코드, 난 정말 AOP 방식을하고 있지 좋을 것. 서투르며 천천히.