2010-11-25 1 views
0

Ich war mir nicht sicher, wie ich das nennen soll. Grundsätzlich habe ich ein Label-Widget. Es hat eine automatische Größenfunktion. Das Problem ist, ich weiß nicht, wer setSize() aufruft; Ich muss wissen, ob die Klasse es aufgerufen hat oder ob der Benutzer des Labels sie aufgerufen hat, weil Sie die Größe eines Widgets zur automatischen Größenanpassung nicht ändern können. Ich kann die Größe nicht direkt ändern, weil, nun, 1, es ist nicht sehr OO, und 2 Ich kann nicht darauf zugreifen, weil die Größe in der Basisklasse ist. Ich kann setSize() nur überschreiben, aber ohne zu wissen, wer es angerufen hat, kann ich niemanden herausfiltern.Verhindern, dass andere aufgrund einer Bedingung eine Funktion aufrufen, aber der Klasse immer erlauben, sie aufzurufen?

Danke

Antwort

3

Verschieben Sie die Implementierung in eine (umbenannte) private Methode, machen Sie setSize() in einen Wrapper, der die Bedingung überprüft.

1

Klingt, als ob Sie eine private/geschützte Überschreibung benötigen.

0

Sie können eine private setSizeInternal Methode und eine öffentliche Methode erstellen, die den Zustand überprüft.

0

wie andere gesagt haben, müssen Sie eine private/geschützte setSize, die die Größe ohne Bedingungsprüfung festlegen kann und eine öffentliche, die die Überprüfung der Bedingung durchführt. Sie würden die öffentliche die private nur anrufen, wenn die Bedingungen erfüllt sind