2014-07-02 17 views
1

我在寫一個簡單的程序來理解繼承。遺傳缺失定義

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」接受類型的第一個參數C:\ Users \ hk \ documents \ visual studio 2013 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs 24 ConsoleApplication1

可能發現'ConsoleApplication1.Dog'(您是否缺少使用指令或程序集引用?錯誤2'ConsoleApplication1.Animal不包含定義f或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的基類;狗和貓繼承動物。 不應該它狗和貓默認所有的動物定義,因爲他們繼承動物?

+1

大/小寫問題 –

+1

'dog.printAnimal()'應該是'dog.PrintAnimal()'' – lastr2d2

+1

公共枚舉AnimalType'爲什麼你需要跟蹤的是什麼類型的動物?該類型告訴你。 'if(myAnimalVariable is Dog)Console.WriteLine(「Hello,this is dog。」);'如果我想申報自己的動物,該怎麼辦?現在我得到了保護(沒有雙關語意思),因爲我無法更新您的枚舉。 –

回答

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 S,只有Cat S和Dog小號誰被歸類爲動物。

2

printAnimal不是PrintAnimal相同。修復您的函數名稱的大小寫。

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