2013-10-22 27 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方法。它笨拙而缓慢。