2016-03-25 4 views
0

私は本の例に従おうとしていて、ボタンを押して値を入力したかったのです。これは基本的なことを理解しようとするだけの簡単な修正でなければなりません。抽象概念から使用可能な整数へ行くか?

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

LaserHitメソッドでは整数が必要です。あなたは 'int L = goliath.LaserHit(10)'をするつもりですか?このメソッドは、期待しているパラメータで何もしません。 –

+0

コード内で正確に何を実行しようとしていますか?現在、メソッド呼び出しの誤った使用のために、現在は完全に不明です。 –

+1

間違った使い方だけでなく、私はこのコードがまったくコンパイルされないと言っています。オーバーライドLaserHitメソッドは、抽象メソッドとは異なるシグネチャを持ちます。 button_Clickでは、メソッドが値(int?)を返したものとして使用されますが、メソッド定義と宣言の両方に戻り値がありません。 SDJ、問題をもっとはっきりと述べる必要があります。 – Christoph

答えて

2

LaserHitメソッドのメソッドシグネチャに注意してください。戻り値の型はvoid - >です。つまり、このメソッドは何も返しません。 LaserHitで返された値を割り当てようとしていますが、何も返さないように設計されています。

抽象クラスと具象クラスの両方でメソッドシグネチャをintに変更すると、必要なものが得られます。

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

注意してください、あなたのコードはコンパイルされません:) –

+1

LaserHitの抽象クラスの署名を編集しました –

+2

もう一度注意してください:) –

関連する問題