Программистское

Jul 08, 2011 17:04

Задача: есть метод, в глубине которого показывается окошко, которое хочется уметь центрировать двумя способами - относительно заданной точки или заданного контрола.

Read more... )

fun, programming, work

Leave a comment

Comments 4

strangeraven July 9 2011, 07:31:44 UTC
я бы сделал так:

public void DoSomewhingAndShowWindow( ..., Point originPoint )
Point FrameworkElement::GetCenter()

FrameworkElement element;
DoSomewhingAndShowWindow( ..., element.GetCenter() )

Reply

the_wr July 9 2011, 08:58:02 UTC
Ага. Это лучший вариант.
Но сгодится только когда из объектов вытаскивается общая часть.
Если бы у FrameworkElement не было GetCenter, (а его кстати и правда нет =))... Но в новом шарпе придумали Extension Methods, они решают эту проблему.

Я тут кстати в фоне думаю как прикрутить банчи к редакторам, ибо уже было несколько юз-кейсов =)
Беда в том что хочется чтобы банчами были все объекты, а доступа к реализации микрософтовых классов, понятно, нет. Да и мультинаследование, опять же...
Пока придумалась фабрика в виде глобального синглтона, которая живёт сбоку и хранит в себе мапину <объект, коллекция_запчастей>. Все операции с запчастями - через неё...
Но тут ряд проблем - например, при удалении обжа извне без явного удаления из фабрики он будет залипать в этой мапине и жрать память...

Reply


strangeraven July 9 2011, 15:29:49 UTC
Ну даже если нет (и нельзя добавить), или без extension, то можно и внешнюю функцию сделать Point GetCenter(FrameworkElement)

Внешняя фабрика - да, чревата утечками. У нас мапина частей лежит в самом объекте.

Reply


mnavern July 9 2011, 21:32:32 UTC
Отличный пример злоупотребления шаблонами проектирования. Браво!

Reply


Leave a comment

Up