Ist es akzeptabel, Abhängigkeitseigenschaften von nicht verwandten Klassen zu „borgen“?

StackOverflow https://stackoverflow.com/questions/227030

  •  03-07-2019
  •  | 
  •  

Frage

Ich schreibe eine Klasse, die einige Inhalte in WPF rendert, und ich möchte dem Benutzer die Kontrolle darüber geben, wie der Inhalt wiedergegeben wird. Das Rendering wird meist streicht Linien, so habe ich beschlossen, auf die System.Windows.Forms.Shapes.Line Klasse suchen eine Vorstellung davon zu bekommen, was Eigenschaften Ich möchte vielleicht implementieren. Dies führte mich die meisten der StrokeXXXX Eigenschaften zu implementieren, und es ist viel drudgework da jede Metadaten erfordert die Wiedergabe zu beeinflussen.

Ein Kollege schlug vor, dass ich nur „ausleihen“, um die Eigenschaften von Form wie folgt aus:

Shape.StrokeThicknessProperty.AddOwner(typeof(MyType));

Dies scheint eine ziemlich gute Idee. Ich dachte, dass dadurch ich die Fähigkeit verlieren würde Zwang und Eigentum veränderte Rückrufe zu setzen, aber es sieht aus wie die Überlastung, dass dies ein PropertyMetadata ermöglicht nimmt. Der einzige Nachteil ich sehen kann, ist, wenn die Umsetzung von Shape ändert, wird es unsere Klasse beeinflussen, aber ich bin unsicher, wie oft ich die .NET-Schnittstellen erwarten wesentlich zu ändern.

Was denken Sie? Ist dies eine anständigen Verknüpfungseigenschaften zu definieren, wenn eine bekannte Klasse das Verhalten hat Sie wollen und eine stabile Schnittstelle oder einen sicheren Weg, mit dem Feuer zu spielen, während in einem Benzin-Bad?

War es hilfreich?

Lösung

Es ist sehr sicher und nützlich DPs zu leihen ... Lesen Sie die folgender Beitrag von Dr. WPF über das Thema!

Hier ist ein paar der „Spitze“ er bietet:

  • Sie sollten immer wissen, was der Besitzer Klasse hat mit jeder Eigenschaft, die Sie leihen.
  • Sie sollten ihr Augenmerk auf Standardwerte und Vererbung zahlen. Manchmal müssen Sie eine Bool-Eigenschaft mit einem Standardwert true ... anderen Zeiten können Sie einen Standardwert false wollen. Manchmal müssen Sie eine Eigenschaft, die erbt ... manchmal ist ausdrücklich nicht Erbe wollen. (Borrowing eine Eigenschaft wie TextElement.FontSize wirklich Dinge vermasseln könnte weiter unten im Baum).
  • Die Eigentümer Klasse kann manchmal eine PropertyChangedCallback definieren, die mit Ihrer Fähigkeit, stören die Eigenschaft zu verwenden, wie Sie es wünschen. Immer wissen, was der Besitzer Klasse hat mit der Eigenschaft.
  • Die Besitzer Klasse eine Prüfroutine für die Eigenschaft kann vorsehen, dass Sie am Eintritt in den Wert, den Sie angeben möchten verhindert. Auch hier weiß immer, was der Besitzer-Klasse mit der Eigenschaft der Fall ist. Die Eigenschaft kann in einer Weise registriert werden, dass es teuer perf-weise, wie FixedPage.Bottom macht, die die die Eigenschaftsänderungen an einem Objekt arrangieren jederzeit der Eltern ungültig. Manchmal können Sie explizit dieses Verhalten wollen ... ein anderes Mal wird es nur unnötig verursachen Layout passiert. Auch hier immer wissen, was der Besitzer-Klasse mit der Eigenschaft der Fall ist.
  • Wenn Sie eine Immobilie in einem Szenario verwenden, wo das Framework selbst versucht, die Eigenschaft (wie TextSearch.TextPath auf einem Itemscontrol) zu verwenden, sind Sie verpflichtet, sich im Rennen mit dem Rahmen zu finden.

Andere Tipps

Ich würde einfach weiter meine eigenen Abhängigkeitseigenschaften zu schaffen, persönlich. Es ist wirklich nicht viel zusätzliche Arbeit, und dann müssen Sie nicht über eine der möglichen Einschränkungen kümmern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top