2017-02-03 4 views
-2

Я только что начал C# пару часов назад, и я увидел методы создания классов в C#. Я сделал свои собственные два класса «Животное и собака», где «Собака» наследует «Животное». Мой код не имеет ошибки, но все же моя программа вылетает при выполнении. У меня есть немного знаний об oop. Я пропустил что-то важное здесь в этом коде?сбой программ в двух простых классах. C# Новичок

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace MultipleClasses 
{ 
    class Animal 
    { 
     public int hands; 
     public Boolean feathers; 
     public int legs; 
     public int getlegs(){ return legs; } 
     public void setlegs(int l){this.legs = l;} 
     public void sethands(int h){this.hands = h;} 
     public int gethands(){return this.hands;} 
     public void setfeathers(Boolean f){this.feathers = f;} 
     public Boolean getfeathers(){return this.feathers;} 
     public Animal(int l=0, int h=0, Boolean f=false){ 
      this.legs = l; 
      this.hands = h; 
      this.feathers = f; 
     } 
    } 
    class Dog : Animal 
    { 
     public string name; 
     public int age; 
     public string getname(){return this.name;} 
     public int getage(){return this.age;} 
     public void setname(string n) { this.name = n;} 
     public void setage(int g){this.age = g;} 

     public Dog(string n, int g, int l, int h, Boolean f) : base(l, h, f) 
     { 
      this.name = n; 
      this.age = g; 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Dog a = new Dog("Jack",5,4,0,false); 
      Console.WriteLine("The Dog's name is {0} and age is {1} "+a.getname(),a.getage()); 
     } 
    } 
} 
+0

Некоторые сообщение об ошибке было бы полезно, если это не викторина, и мы должны угадать сообщение об ошибке –

+1

Код выглядит технически правильно, хотя в C# мы не пишем 'get ...' и 'set ...', но вместо этого используйте свойства с геттерами и сеттерами. Я предполагаю, что «сбой» означает исключение. Пожалуйста, сообщите нам сообщение об исключении и трассировку стека, которая укажет вам на строку, которая вызывает ошибку. –

ответ

1

Проблема эта линия:

Console.WriteLine("The Dog's name is {0} and age is {1} "+a.getname(),a.getage()); 

Изменение + к ,

Console.WriteLine("The Dog's name is {0} and age is {1} ", a.getname(),a.getage()); 

выход при коррекции:

Имя собаки Джек и возраст 5

Существуют и другие проблемы с кодом, а именно с тем, как вы назвали некоторые вещи, вы, вероятно, захотите также прочитать о геттерах и сеттерах.

+1

Это ошибка, но она не должна приводить к ошибкам. –

+2

@SergeyBerezovskiy. Он делает «FormatException», если отсутствует аргумент для '' {1} "' –

+0

Если я запустил его с '+', я получу ошибку ' Индекс (основанный на нуле) должен быть больше или равен нулю и меньше размера списка аргументов'. При изменении на ',' он работает отлично. FYI с использованием Linqpad 5 в случае, если это имеет значение. – Equalsk

0

Re писать коды, такие как C#, как:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace MultipleClasses 
{ 
    class Animal 
    { 
     public int hands { get; set; } 
     public Boolean feathers { get; set; } 
     public int legs { get; set; } 
     public Animal(int l = 0, int h = 0, Boolean f = false) 
     { 
     this.legs = l; 
     this.hands = h; 
     this.feathers = f; 
     } 
    } 

    class Dog : Animal 
    { 
    public string name { get; set; } 
    public int age { get; set; } 
    public Dog(string n, int g, int l, int h, Boolean f) 
    { 
     this.name = n; 
     this.age = g; 
     this.legs = l; 
     this.hands = h; 
     this.feathers = f; 
     } 
    } 

    class Program 
    { 
    static void Main(string[] args) 
    { 
     Dog a = new Dog("Jack", 5, 4, 0, false); 
     Console.WriteLine("The Dog's name is {0} and age is {1}", a.name.ToString(), a.age.ToString()); 
    } 
    } 
} 
Смежные вопросы