Abstrakte Variable / Eigenschaft? C #

7

Ich habe einige Eigenschaften gelesen und bin mir nicht sicher, ob das das ist, was ich will oder nicht. Grundsätzlich habe ich eine abstrakte Projektilklasse, so dass alle "Kugeln" eine gemeinsame Implementierung haben, von der jede "Waffe", mit der sie verbunden sind, zu erwarten ist.

Ich weiß, dass Sie eine abstrakte Klasse deklarieren können und die darin deklarierten Funktionen erzwingen können. Ich möchte das gleiche mit den Variablen (ich denke, diese Funktionalität scheint nicht zu existieren, also denke ich vielleicht über die Lösung falsch)

Mein Problem ist, dass, da alle "Kugeln" einen Schaden haben sollten, ich gezwungen wäre, im Code den Schadenswert einer Kugel zu deklarieren.

Es kann einen Fall geben, in dem die Runde von einer Elektroschockpistole kommt und es keinen Schaden verursacht, aber ich glaube, dass ich aus zwei Gründen dazu gezwungen werden sollte, es zu erklären.

  1. Die explizite Deklaration in diesem Code ist null wert und ist die eine Codezeile wert. Du musst nicht gut gehen, ich schätze, es tut nichts, da es nichts über Schäden sagt, die explizit erwähnt werden.

  2. Debugging (das ist der Hauptgrund, dass der andere kleiner ist) Ich möchte gezwungen werden, also vergesse ich nicht. Ich möchte den Variablennamen nicht falsch eingeben oder vergessen, einen Wert insgesamt zuzuweisen und eine halbe Stunde lang zu jagen, um herauszufinden, warum meine Rakete oder Rakete oder Kugel oder was auch immer keinen Schaden anrichtet oder genau 1 oder die Menge tut des letzten Projektils, das ich verwendet habe oder was auch immer der Standardwert der float-Variablen ist, die ich in der abstrakten Klasse deklariert habe. Ich möchte sofort einen Fehler bekommen und mir sagen, dass ich nicht weitermachen kann, bis meine neue Kugel einen Schaden hat.

sparkzbarca 27.04.2013, 01:23
quelle

3 Antworten

9

Eigenschaften sind, was Sie suchen. Auf einer Schnittstelle würden Sie einfach so etwas tun:

%Vor%

Nur die get-Methode muss in der Schnittstelle definiert werden, da Sie nur den Verbraucher der Schnittstelle benötigen, um von der Schadenseigenschaft zu lesen, und Sie möchten es dem Verbraucher nicht erlauben, den Schadenswert zu schreiben.

Die Implementierung wäre etwa so:

%Vor%     
nathan gonzalez 27.04.2013, 01:28
quelle
8

Hier ist ein bisschen genauer, wie man das implementiert:

%Vor%

Unterscheidung zwischen der Verwendung einer Schnittstelle oder einer abstrakten Klasse als Basis: Eine abstrakte Klasse ist eine geteilte Implementierung , eine Schnittstelle ist ein gemeinsamer Vertrag . Sie teilen einige Gemeinsamkeiten, erfüllen jedoch unterschiedliche Anforderungen. Zum Beispiel könnten Sie Anforderungen (eine gemeinsame Schnittstelle IProjectile ) zwischen Kleinwaffen und schwereren Waffen oder zwischen tödlichen und nicht-tödlichen Waffen teilen, während Sie die drei Kategorien in drei verschiedenen abstrakten Klassen (< strong> LethalSmallArms , NonLethalSmallArms und Howitzers ), die alle die gemeinsame Schnittstelle IProjectile implementieren.

    
Pieter Geerkens 27.04.2013 02:15
quelle
3

Ich denke, du solltest mit dem Interface-Ansatz von Nathans Antwort ausgehen. Es ist jedoch möglich, abstrakte Eigenschaften zu deklarieren.

%Vor%     
MAV 27.04.2013 01:42
quelle

Tags und Links