2013-11-23 72 views

回答

2

在.NET中不可能繼承sealed class。所以,如果你想創建繼承你密封類的裝飾器,那麼回答是 - 這是不可能的。

public class Decorator : SealedClass // not possible 

如果密封類實現了一些接口或繼承的一些基礎類,那麼你可以創建裝飾它繼承相同的類/接口。裝飾師看起來不像你的班級給客戶,但你可以用它來裝飾你的班級。

public sealed class SealedClass : InterfaceA 

public class Decorator : InterfaceA 

另一種選擇 - 創建一些新的接口(它看起來可能與您的密封類接口完全相同)併爲此接口實現裝飾器。然後爲此接口創建密封類適配器。客戶將使用您的新界面。你將能夠裝飾適配器

public class Decorator : InterfaceB // same members as SealedClass have 

public class Adapter : InterfaceB 
{ 
    private SealedClass adaptee; 

    public Adapter(SealedClasss adaptee) 
    { 
     this.adaptee = adaptee; 
    } 

    public int Member1() 
    { 
     return adaptee.Member1(); 
    } 

    // etc for each member of SealedClass 
}