C# 继承缺少定义
我正在写一个简单的程序来理解继承C# 继承缺少定义,c#,visual-studio-2013,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 } cla
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”的定义,并且找不到接受类型为“ConsoleApplication1.Dog”的第一个参数的扩展方法“printAnimal”。是否缺少using指令或程序集引用?C:\Users\hk\documents\visual studio 2013\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs 24 17 ConsoleApplication1
错误2“ConsoleApplication1.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的基类;狗和猫继承动物。
既然狗和猫继承了动物,那么它们不应该默认拥有所有的动物定义吗?您必须使用一致的命名。这里您用大写字母定义PrintAnimal,但用小写字母调用它
class Dog : Animal {
public Dog () {
base.Animal("Doggy", AnimalType.Dog);
}
public override void PrintAnimal () {
Console.WriteLine("Bark");
}
}
接下来,C中的基本构造调用如下所示:
public class Dog {
public Dog () : base("Doggy", AnimalType.Dog) {
}
}
猫也一样
最后,我建议您对未定义的方法使用抽象:
abstract class Animal {
//...
public abstract void PrintAnimal ();
}
因此,编译器将检查您是否对该方法进行了重写,以减少不一致性,例如忘记重写、重写另一个名称几乎相同的方法等
抽象类阻止程序员构造动物这是合理的,因为没有动物,只有猫和狗被归为动物。必须使用一致的命名。这里您用大写字母定义PrintAnimal,但用小写字母调用它
class Dog : Animal {
public Dog () {
base.Animal("Doggy", AnimalType.Dog);
}
public override void PrintAnimal () {
Console.WriteLine("Bark");
}
}
接下来,C中的基本构造调用如下所示:
public class Dog {
public Dog () : base("Doggy", AnimalType.Dog) {
}
}
猫也一样
最后,我建议您对未定义的方法使用抽象:
abstract class Animal {
//...
public abstract void PrintAnimal ();
}
因此,编译器将检查您是否对该方法进行了重写,以减少不一致性,例如忘记重写、重写另一个名称几乎相同的方法等
抽象类阻止程序员构造动物这是合理的,因为不存在动物,只有猫和狗被归类为动物。printAnimal与printAnimal不同。修正函数名的大写
static void Main(string[] args) {
Dog dog = new Dog();
dog.PrintAnimal(); // NOT printAnimal !!
}
printAnimal与printAnimal不同。修正函数名的大写
static void Main(string[] args) {
Dog dog = new Dog();
dog.PrintAnimal(); // NOT printAnimal !!
}
大写/小写issuedog.printAnimal应该是dog.PrintAnimalpublic enum AnimalType为什么需要跟踪它是什么类型的动物?类型告诉你。如果myAnimalVariable是Dog Console.WriteLineHello,则这是Dog。;如果我想申报我自己的动物怎么办。现在我没有双关语,因为我不能更新你的枚举。那些没有双关语的人几乎总是想要双关语:--@ta.speot.is:这个话题当然有争议。但在大学里,我们了解到操作符的实例是对糟糕设计的警告。您应该尝试使用动态绑定。大写/小写issuedog.printAnimal应该是dog.PrintAnimalpublic enum AnimalType为什么需要跟踪它是什么类型的动物?类型告诉你。如果myAnimalVariable是Dog Console.WriteLineHello,则这是Dog。;如果我想申报我自己的动物怎么办。现在我没有双关语,因为我不能更新你的枚举。那些没有双关语的人几乎总是想要双关语:--@ta.speot.is:这个话题当然有争议。但在大学里,我们了解到操作符的实例是对糟糕设计的警告。您应该尝试使用动态绑定。