2016-03-25 5 views
0

Ich habe versucht, einem Beispiel in einem Buch zu folgen und wollte dann Werte per Knopfdruck eingeben. Dies muss eine einfache Lösung sein, nur um die Grundlagen herauszufinden.Von Abstract zu einem brauchbaren Integer gehen?

abstract class Spaceship 
{ 
    abstract public void LaserHit(); 
} 
class CombatShip : Spaceship 
{ 
    public override void LaserHit(int L) 
    { 
     int L = 10; 
    } 
} 
public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     CombatShip goliath = new CombatShip(); 
     int L = goliath.LaserHit() - 10; 


    } 
} 
+0

Ihre LaserHit-Methode erwartet eine ganze Zahl. Willst du 'int L = goliath.LaserHit (10)' machen? Die Methode führt auch nichts mit dem erwarteten Parameter aus. –

+0

Was genau möchten Sie im Code ausführen? Derzeit ist es aufgrund der falschen Verwendung des Methodenaufrufs völlig unklar. –

+1

Nicht nur falsche Verwendung, aber ich wage zu sagen, dass dieser Code überhaupt nicht kompiliert. Die überschreibende LaserHit-Methode hat eine andere Signatur als die abstrakte Methode. In button_Click wird die Methode so verwendet, als würde sie einen Wert (int?) Zurückgeben, aber sowohl die Methodendefinition als auch die Deklaration haben einen void Rückgabewert. SDJ, müssen Sie Ihr Problem viel klarer angeben. – Christoph

Antwort

2

Achten Sie auf die Methodensignatur Ihrer LaserHit Methode. Rückgabetyp ist void -> bedeutet, dass diese Methode nichts zurückgibt. Sie versuchen, den von LaserHit zurückgegebenen Wert zuzuweisen, aber es wurde entwickelt, um nichts zurückzugeben.

Ändern Sie die Methodensignatur sowohl in der abstrakten Klasse als auch in der konkreten Klasse in int und Sie erhalten, was Sie wollen.

abstract class Spaceship 
{ 
    abstract public int LaserHit(); 
} 
class CombatShip : Spaceship 
{ 
    public override int LaserHit() 
    { 
     int L = 10; 
     return L; 
    } 
} 
+2

Bitte beachten Sie auch, wird Ihr Code nicht kompilieren :) –

+1

Danke, editierte Unterschrift von LaserHit in abstrakten Klasse –

+2

Achtung noch einmal :) –