2016-12-11 6 views
0

Ich habe seit ein paar Stunden darüber gesucht und kann nicht den Grund finden, warum nichts ausgegeben wird. Es werden keine Fehler angezeigt, daher ist etwas im Code enthalten. Kann jemand bitte das hier ansehen und möglicherweise etwas fangen, das ich nicht sehe? Vielen Dank!Brauchen Sie den zweiten Satz von Augen auf C# Code

namespace ConsoleApplication8 
{ 
    class Tape 
    { 
     public Tape(int length, int width) 
     { 
      len = length; 
      wid = width; 
     } 
     public int len { get; set; } 
     public int wid { get; set; } 

     public override string ToString() 
     { 
      return string.Format("{0}\nLength: {1}\nWidth: {2}", GetType(), len, wid); 
     } 
    } 

    class VideoTape : Tape 
    { 
     public int PlayTime { get; set; } 
     public VideoTape(int length, int width, int playTime) 
      : base(len, wid) 
     { 
      PlayTime = playTime; 
     } 
     public override string ToString() 
     { 
      return string.Format("{0}\nPlay Time: {1}", base.ToString(), PlayTime); 
     } 
    } 
    class AdhesiveTape : Tape 
    { 
     private int _stickiness; 
     public AdhesiveTape(int length, int width, int stickiness) 
      : base(length, width) 
     { 
      Stickiness = stickiness; 
     } 
     public int Stickiness 
     { 
      get { return _stickiness; } 
      set 
      { 
       if (value >= 1 && value <= 10) 
        _stickiness = value; 
       else 
        _stickiness = 0; 
      } 
     } 
     public override string ToString() 
     { 
      return string.Format("{0}\nStickiness: {1}", 
       base.ToString(), (Stickiness == 0) ? "Invalid Input" : Stickiness.ToString()); 
     } 
    } 

    class Test 
    { 
     static void Main(string[] args) 
     { 
      var tape = new Tape(100, 10); 
      var videoTape = new VideoTape(50, 5, 200); 
      var adhesiveTape = new AdhesiveTape(500, 8, 8); 

      Console.WriteLine(tape); 
      Console.WriteLine(videoTape); 
      Console.WriteLine(adhesiveTape); 

      Console.ReadLine(); 
     } 
    } 
} 
+2

Es gibt einen Kompilierfehler für ': base (len, wid)', sollte 'base (length, width) ' –

+0

genau sein, es gibt einen Kompilierfehler in der Basiskonstruktorverwendung ... dann funktioniert es ok –

+0

@YacoubMassad Ich bin mir nicht sicher, dass das ein Compilerfehler ist, da VideoTape von Tape erbt und 'len' und' wid' gültige Felder in dieser Klasse sind, aber es ist mit ziemlicher Sicherheit ein Tippfehler. – Abion47

Antwort

1

Wie bereits erwähnt wurde, gibt es eine Parameterübergabe Problem im Konstruktor des Videokassette Art der Basiskonstruktor Aufruf, der folgende Code funktioniert gut für mich:

using System; 
    namespace ConsoleApplication8 
    { 
     class Tape 
     { 
      public Tape(int length, int width) 
      { 
       len = length; 
       wid = width; 
      } 
      public int len { get; set; } 
      public int wid { get; set; } 

      public override string ToString() 
      { 
       return string.Format("{0}\nLength: {1}\nWidth: {2}", GetType(), len, wid); 
      } 
     } 

     class VideoTape : Tape 
     { 
      public int PlayTime { get; set; } 
      public VideoTape(int length, int width, int playTime) 
       : base(length, width) 
      { 
       PlayTime = playTime; 
      } 
      public override string ToString() 
      { 
       return string.Format("{0}\nPlay Time: {1}", base.ToString(), PlayTime); 
      } 
     } 
     class AdhesiveTape : Tape 
     { 
      private int _stickiness; 
      public AdhesiveTape(int length, int width, int stickiness) 
       : base(length, width) 
      { 
       Stickiness = stickiness; 
      } 
      public int Stickiness 
      { 
       get { return _stickiness; } 
       set 
       { 
        if (value >= 1 && value <= 10) 
         _stickiness = value; 
        else 
         _stickiness = 0; 
       } 
      } 
      public override string ToString() 
      { 
       return string.Format("{0}\nStickiness: {1}", 
        base.ToString(), (Stickiness == 0) ? "Invalid Input" : Stickiness.ToString()); 
      } 
     } 

     class Test 
     { 
      static void Main(string[] args) 
      { 
       var tape = new Tape(100, 10); 
       var videoTape = new VideoTape(50, 5, 200); 
       var adhesiveTape = new AdhesiveTape(500, 8, 8); 

       Console.WriteLine(tape); 
       Console.WriteLine(videoTape); 
       Console.WriteLine(adhesiveTape); 

       Console.ReadLine(); 
      } 
     } 
    } 

Geändert:

public VideoTape(int length, int width, int playTime) 
      : base(len, wid) 

An:

public VideoTape(int length, int width, int playTime) 
      : base(length, width) 

Die len und wid sind keine Parameter des Videobandes Konstruktor, kann somit nicht an die Basis-Konstruktor übergeben werden

Hier ist eine .net Geige, wo Sie es laufen und spielen, um mit ihm sehen: https://dotnetfiddle.net/YZUC4O

+1

Vielleicht möchten Sie in Ihrer Antwort das OP auf das genaue Problem und was Sie behoben haben und warum Ihr Fix funktioniert. Andernfalls müssen andere Personen den Fehler in dem Code finden, den Sie eingefügt haben. – CodingYoshi

+0

@CodingYoshi Fertig, danke für Hinweis –

+0

Nach dem Ändern des Codes an meinem Ende, habe ich immer noch keine Ausgabe erhalten. Ich habe es genauso geändert wie du es getan hast. – EVar

Verwandte Themen