Необходимо автоматически форматировать нумерованные строки в WPF ListBox

Ключевое слово «тени» по существу говорит: «Если кто-либо, кто обращается к этому объекту, знает, что он имеет этот тип или один из его потомков, используйте этот элемент, иначе используйте базовый». Простейшим примером этого может быть базовый класс ThingFactory, который включает в себя метод «MakeNew», который возвращает Thing, и класс CarFactory, полученный от ThingFactory, метод «MakeNew» всегда возвращает Вещь, которая будет иметь производный тип Car. Если рутина знает, что ThingFactory, с которым он держится, происходит, в частности, CarFactory, тогда он будет использовать затененный CarFactory.MakeNew (если таковой существует), который может указывать тип возврата в качестве автомобиля. Если рутина не знает, что его ThingFactory на самом деле является CarFactory, он будет использовать не скрытый MakeNew (который должен вызывать внутренний защищенный переопределяемый метод MakeDerivedThing).

Кстати, другое хорошее использование теней для предотвращения доступа к производным классам защищенных методов, которые больше не будут работать. Невозможно просто скрыть член от производных классов, отличных от назначения нового, но можно запретить производным классам что-либо делать с защищенным членом, объявив новый защищенный пустой класс с этим именем. Например, если вызов объекта MemberwiseClone на объекте сломает его, можно объявить:

  Protected Shadows Class MemberwiseClone
  End Class
Обратите внимание, что это не нарушает принципы ООП, такие как Принцип замещения Лискова, поскольку это применимо только в случаях, когда производный класс может использоваться вместо объект базового класса. Если Foo и Bar наследуются от Boz, метод, который принимает параметр Boz, может быть законно передан в Foo или Bar вместо этого. С другой стороны, объект типа Foo будет знать, что его объект базового класса имеет тип Boz. Это никогда не будет чем-то другим (например, он не будет баром).

0
задан spainchaud 24 February 2015 в 19:47
поделиться