继承缺少定义

时间:2014-07-02 03:10:12

标签: c# visual-studio-2013

我正在编写一个简单的程序来理解继承。

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

namespace ConsoleApplication1
{
    public enum AnimalType
    {
        Dog = 0,
        Cat = 1
    }

    class Program
    {
        static void Main(string[] args)
        {
            Dog dog = new Dog();

            dog.printAnimal();
        }
    }

    class Animal
    {
        public string AnimalName;
        public AnimalType AnimalType;

        public Animal()
        {
            SetAnimalName ("");
            SetAnimalType (AnimalType.Dog);
        }

        public Animal (string animalName, AnimalType animalType)
        {
            SetAnimalName (animalName);
            SetAnimalType (animalType);
        }

        public virtual void PrintAnimal ()
        {
            Console.WriteLine("Animal::PrintAnimal -> this function should not get called");
        }

        private void SetAnimalName (string animalName)
        {
            this.AnimalName = animalName;
        }

        private void SetAnimalType (AnimalType animalType)
        {
            this.AnimalType = animalType;
        }
    }

    class Dog : Animal
    {
        public Dog ()
        {
            base.Animal("Doggy", AnimalType.Dog);
        }

        public override void PrintAnimal ()
        {
            Console.WriteLine("Bark");
        }
    }

    class Cat : Animal
    {
        public Cat()
        {
            base.Animal("Kitty", AnimalType.Cat);
        }

        public override void PrintAnimal()
        {
            Console.WriteLine("Meow");
        }
    }
}

我收到以下错误:

  

错误1' ConsoleApplication1.Dog'不包含' printAnimal'的定义没有扩展方法' printAnimal'接受类型' ConsoleApplication1.Dog'的第一个参数。可以找到(您是否缺少using指令或程序集引用?)C:\ Users \ hk \ documents \ visual studio 2013 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 24 17 ConsoleApplication1

     

错误2' ConsoleApplication1.Animal不包含Animal C的定义:\ Users \ hk \ documents \ visual studio 2013 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 65 18 ConsoleApplication1

     

错误3 ConsoleApplication1.Animal不包含' Animal'的定义。 C:\ Users \ hk \ documents \ visual studio 2013 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 78 18 ConsoleApplication1

我创建了一个名为animal的基类;和狗和猫继承动物。 因为他们继承了动物,所以狗和猫不应该拥有所有的动物定义吗?

2 个答案:

答案 0 :(得分:5)

您必须使用一致的命名。在这里,您以大写形式定义PrintAnimal,但以小写形式调用它。

class Dog : Animal {

    public Dog () {
        base.Animal("Doggy", AnimalType.Dog);
    }

    public override void PrintAnimal () {
        Console.WriteLine("Bark");
    }

}

接下来,C#中的base构造调用完成如下:

public class Dog {

    public Dog () : base("Doggy", AnimalType.Dog) {
    }

}

Cat相同。

最后,我建议您使用abstract作为未定义的方法:

abstract class Animal {

    //...

    public abstract void PrintAnimal ();

}

因此,编译器将检查您是否对该方法执行了override以减少不一致性(例如,忘记覆盖,覆盖具有几乎相同名称的其他方法等)。

abstract class阻止程序员“构建动物”这是合理的,因为不存在Animal个,只有CatDog被分组为动物

答案 1 :(得分:2)

printAnimal PrintAnimal相同。修复函数名称的大小写。

static void Main(string[] args) {
    Dog dog = new Dog();
    dog.PrintAnimal();    // NOT printAnimal !!
}