public class Decorator : ICommonInterface
{
ComponentType baseRef {get; set;}
ComponentFunction //Function that i want to modify with the Decorator
{
//Additional stuff i want to do here
baseRef.ComponentFunction() // do stuff
}
}
public class DecoratedClass : ICommonInterface
{
ComponentFunction(){ //do stuff }
}
Это в значительной степени то, как я определяю свой декоратор. Я использую это так:
main(){
DecoratedClass _base = new DecoratedClass();
Decorator _end = new Decorator(_base);
_end.ComponentFunction() // I use the Decorator _end ComponentFunction instead of
// doing _base = new Decorator(_base) so i keep base reference
}
Но в какой-то момент внутри main мне придется сделать что-то вроде:
main(){
// some point later inside main
_base = new ClassThatInheritsFromDecoratedClass()
}
Я все еще буду использовать _end переменная для вызова ComponentFunction (), но _end имеет старое значение _base. В C / C ++ я мог бы поиграть с указателями и не использовать ключевое слово new для переопределения _base или чего-то еще, но возможно ли изменить _base так, как в C#, и _end.baseRef будет новым значением _base не делая что-то вроде:
_end.baseRef = _base
после того, как я изменил _base с ключевым словом new ?