2013-11-23 3 views
1

Рисунок декоратора Использование:Как расширить запечатанный класс дизайном дизайна?

Любой может показать пример того, как расширить герметичные функциональные возможности класса Декор.

+1

Выполняете ли ваш герметичный класс какой-либо интерфейс или используете базовый класс? Было бы неплохо увидеть определение класса здесь –

ответ

2

Невозможно наследовать от sealed class в .NET. Итак, если вы хотите создать декоратор, который наследует ваш запечатанный класс, тогда ответьте - это невозможно.

public class Decorator : SealedClass // not possible 

Если запечатанный класс реализует некоторый интерфейс или наследует некоторые базовый класс, то вы можете создать декоратор, который наследуется же класс/интерфейс. Decorator не будет выглядеть как ваш класс для клиентов, но вы сможете использовать его для украшения своего класса.

public sealed class SealedClass : InterfaceA 

public class Decorator : InterfaceA 

Другой вариант - создать новый интерфейс (он может выглядеть точно так же, как ваш закрытый интерфейс класса) и реализовать декоратор для этого интерфейса. Затем создайте герметичный класс Adapter для этого интерфейса. Клиенты будут использовать ваш новый интерфейс. Вы сможете украсить адаптер

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 
} 
Смежные вопросы