Wie kapselt man eine Eigenschaft in einer Basisklasse?

8

In meinem Szenario geht es um die Entwicklung von mathematischen Problemen. Als IProblem interface dachte ich, dass die zwei Haupteigenschaften, die es enthalten sollte, QuestionText und Response sind. QuestionText ist immer eine Zeichenkette, aber Response kann manchmal ein komplexes Objekt (eine benutzerdefinierte Fraction struc) oder ein anderer Datentyp wie string, dezimal, int, usw. sein.

%Vor%

Wie Sie sehen können, ist Response ein Objekt. Ich vermutete diesen Datentyp, weil alle Probleme von Natur aus eine Antwort haben. Und da es ein Objekt ist, definiere ich nur get für zukünftige Fehler (Casting-Probleme).

Meine Idee ist später, in einer konkreten Klasse auf diese Eigenschaft zuzugreifen ( Response ), ohne die Notwendigkeit, zu wirken. Schau es dir an?

%Vor%

Und hier teste ich den Wert.

%Vor%

Bis jetzt funktioniert es, aber ich möchte wissen, ob das, was ich tue, richtig oder eine gute Übung ist. Ich habe gesehen, dass andere Leute den Operator new verwenden, um dies zu tun. Andere verwenden nicht das Wort base .

Ist das ein guter Weg? Kann es zukünftige Fehler verursachen? Bitte geben Sie mir eine Rückmeldung über mein Design.

EDIT: Es ist wirklich notwendig, auf die Antwort in einer nicht-generischen Schnittstelle zuzugreifen.

    
Darf Zon 19.04.2012, 21:26
quelle

1 Antwort

4

Vielleicht suchen Sie so etwas? Beachten Sie, dass ich einige Dinge weggelassen habe, weil sie für den generischen Lösungsteil des Problems (wie QuestionText) nicht wichtig waren. Ich habe auch die Basisklasse weggelassen, weil sie nichts weiter als ein Durchgang und eine zusätzliche, unnötige Schicht zu sein schien. Das ist vielleicht nicht genau das, wonach Sie suchen, aber ich hoffe, es hilft Ihnen dabei.

Zuerst wird so alles verwendet:
Bearbeiten: Beachten Sie, wie sie jetzt alle als nicht-generisches IP-Problem behandelt werden können.

%Vor%

Bearbeiten: Hier ist die nicht-generische Schnittstelle, so dass viele Probleme in einer Liste verwendet und auf die gleiche Weise behandelt werden können:

%Vor%

Hier ist die Schnittstelle:
Bearbeiten: Beachten Sie, dass dies jetzt die nicht-generische Schnittstelle implementiert.

%Vor%

Und hier sind die Klassen:
Bearbeiten: Beachten Sie die neuen Methoden GetResponse ().

%Vor%     
Bob Horn 20.04.2012, 00:01
quelle