2013-10-22 61 views
3

我不知道,因爲沒有辦法如何實現在C#泛型裝飾類(是嗎?)是這樣的:一般裝飾在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 :)

回答

4

有沒有直接等同於該構造,如C#不允許類型的基類是動態的。請記住,泛型類型必須在編譯時完全定義,而不是在使用時。

有多種可行的方法:在上面的例子中,StinkingDog應該只實現IDogDecorator接口。所以只需指定那裏。無論如何,你都在轉接電話。

public class StinkingDog : Decorator<IDogDecorator>, IDogDecorator 

有可能會是你想要的是(即Rhino.Mocks實際上是創造嘲笑這種方式)什麼框架,但對於生產代碼,我真的建議不要做任何AOP方法。它笨拙而緩慢。