Ich versuche, mehr über Object Orientated Programming zu lernen.VB.NET Erstellen einer Klasse mit optionalen Eingabe
Ich versuche, eine Klasse zu erstellen, die ein konisches Objekt wie in diesem Bild darstellt.
A: Anschlussdurchmesser B: Durchmesser C: Höhe
Aber für mich gibt es einige Unterschiede gibt, wenn
1) einen Kegel zu wählen ist die Konusverbindung größer sein werde als der Durchmesser haben Sie einen sich erweiternden Kegel sonst einen Reduktionskegel. Dazu habe ich eine schreibgeschützte Eigenschaft basierend auf einer Enum erstellt, die im Konstruktor festgelegt ist. Dies wird beim Erstellen des Kegelobjekts festgelegt und ist behoben.
2) Wie möchten Sie es dimensionieren? Das Bild hat 3 Dimensionen, aber eine vierte ist ein Winkel. Wenn die Höhe die führende Dimension ist, sollte der Winkel berechnet werden. Wenn der Winkel eine führende Dimension ist, sollte die Höhe berechnet werden. Auch dafür habe ich eine schreibgeschützte Eigenschaft basierend auf einer Enum erstellt, die im Konstruktor gesetzt ist.
Aber wie sollte ich meine Eigenschaften markieren? In einem Fall sollte die Höhe schreibgeschützt sein und in der anderen der Winkel. Wie gehst du mit einer solchen Situation um?
Public Class Cone
Public ReadOnly Property ConeType As ConeTypeEnum
Public Enum ConeTypeEnum
kExpansion = 1
kReduction = 2
End Enum
Public ReadOnly Property DimensionType As DimensionTypeEnum
Public Enum DimensionTypeEnum
kAngle = 1
kHeight = 2
End Enum
Public Property Height As Double
Public Property Diameter As Double
Public Property ConnectionDiameter As Double
Public Property Angle As Double
Public Sub New(ByVal oConeType As ConeTypeEnum,
ByVal oDimensionType As DimensionTypeEnum)
ConeType = oConeType
DimensionType = oDimensionType
End Sub
End Class
Nun, Sie können nicht dynamisch zwischen ReadOnly und nicht, AFAIK. Vielleicht könnten Sie Setter hinzufügen, die den Wert nicht ändern, wenn eine bestimmte Bedingung erfüllt ist/nicht erfüllt ist? –
Es gibt viele Wege, dies zu lösen, da der Wert nur vom Konstruktor einstellbar ist, Methoden haben, die Eigenschaft zu setzen, wenn sie erlaubt sind, und auch zwei verschiedene Cone-Klassen, die die gleiche Cone-Schnittstelle implementieren. Angesichts der Tatsache, dass Sie eigentlich eine andere Implementierung von Eigenschaften möchten; Dann könnte der Schnittstellenansatz IMO Ihnen auf der ganzen Linie helfen. –
Ist es möglich, den Winkel zu berechnen, wenn die Höhe geändert wird, und die Höhe zu berechnen, wenn der Winkel geändert wird? Wenn dies der Fall ist, können Sie beide Eigenschaften als Lesen/Schreiben belassen. – reduckted