2016-06-09 8 views
-1

Я создал в своем «основном» методе «пятно» объекта моего базового класса - это 4 свойства, конструктор класса «Животное» и функция «SaySomething». Мой объект «пятно» передает свои параметры конструктору класса «Animal» для инициализации. Кроме того, я создал производный класс «Собака», который наследует свойства базового класса «Животные» и метод, и я создал объект «grover» в моем «основном» методе, и когда я пытаюсь получить доступ с помощью моего ' grover ', метод «SaySomething», который был унаследован, моя программа выдает исключение: «ConsoleApplication1.Animal» не содержит конструктор, который принимает 0 аргументов, когда я пытаюсь запустить программу.Мой класс C#, который может наследовать свойства и функции базового класса, но генерирует исключение

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

namespace ConsoleApplication1 
{ 
    class Animal 
    { 
     public double height { get; set; } 
     public double weight { get; set; } 
     public string sound { get; set; } 
     public string name { get; set; } 

     public Animal(double height, double weight, string name, string sound) 
     { 
      this.height = height; 
      this.weight = weight; 
      this.name = name; 
      this.sound = sound; 
     } 
     public void SaySomething() 
     { 
      Console.WriteLine("{0} is {1} inches tall, weighs {2} lbs and likes to say {3}", name, height, weight, sound); 
     } 

    } 

    class Dog : Animal 
    { 

    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      Animal spot = new Animal(16,10,"spot","woof"); 
      Dog grover = new Dog(); 
      grover.SaySomething(); 
     } 
    } 
} 

Я понимаю, что мне нужно удалить параметры и аргументы класса конструктора и аргументы, которые программа могла выполнить. Но что не так с этим кодом? почему моя программа не может работать? И нужно выбрать другой способ инициализации или можно улучшить этот код для работы?

+0

Это не должно даже компилироваться. У Animal нет конструктора без параметров, поэтому класс Dog должен вызывать этот конструктор из собственного конструктора. – Silvermind

+1

@Silvermind не компилируется. ОП неправильно идентифицирует это как «исключение». –

ответ

3

Поскольку вы не предоставляете конструктор для Dog, он автоматически создает «пустой» конструктор, который также пытается вызвать «пустой» конструктор Animal. Вам нужно реализовать конструктор для Dog или пустой конструктор для Animal.

+0

Все, что вам нужно сделать, это добавить одно из следующего к соответствующему классу: public Dog() {} public Animal() {} – Erick

+1

Предполагая, что вы хотите, чтобы обе «Собака» и «Животное» были построены без параметров ... –

+0

Правда. (На самом деле, я думал, что у меня есть «или» между ними.);) – Erick