2012-07-14 59 views
0

我真的很陌生,所以如果我的术语错了,请纠正我。用相同的对象调用2个不同的类

我只想问,是否有可能使用2个不同的类都是从同object.the代码是这样的:

//from the Animal Class; 
    public void Run() 
    { 
    int counter = 0; 
    string input = "Beagle"; 
    string input2 = "Fox Terrier"; 
    Dog[] al = new Dog[10]; 
    do 
    { 
    al[counter] = new Dog(); 
    al[counter].validateAnimal(input); 
    al[counter] = new Breed(); 
    Breed br = (Breed)al[counter]; 
    br.validateBreed(input2); 
    }while(counter < 10) 
} 
    //Dog Class 
    //Dog : Animal 
    public void validateDog(string In) 
    { 
    if(In == "Beagle") 
    { 
    Console.WriteLine("Ok"); 
    } 
    } 

//breed class 
// Breed : Dog 
public void validateBreed(string In) 
{ 
if(In == "Fox Terrier") 
{ 
Console.WriteLine("Great"); 
} 
} 

我想要做的就是同时运行validateDog和validateBreed而它正在主要课程中运行。我还需要让品种成为狗的派生类,而狗则是派生类的动物。似乎没有语法错误。但validateBreed不显示。

什么似乎是问题?

+0

你的'do while'不会很快结束。除此之外,柜台的狗将被同一地点的品种覆盖。这不是C#特定的。 – 2012-07-14 09:38:00

回答

0

需要有品种是一个派生类犬

的这是一个错误的要求。品种不是'一种狗',品种是property of Dog。 而不是创建派生类,您应该在Dog类中创建一个属性Breed

您可以在enum中列出所有可用的品种或为其定义一个类。

public enum Breed { Beagle, Husky } 

public class Dog 
{ 
    public Dog(Breed breed) 
    { 
     this.Breed = breed; 
    } 

    public Breed Breed { get; private set; } 
} 

注意品种是在构造函数传递,不能外Dog类,因为狗通常不会改变的品种进行修改。

更新:

您应该发布您的整个代码。很难说现在你在做什么。 从你的样品这应该工作:

var breed = new Breed(); 
breed.validateDog(""); 
breed.validateBreed(""); 

因为这两种方法都是公开的。

您可能想要定义一个虚拟方法validate是基类,并在派生类中重写它。

+0

噢,我看到了。对于我的例子,我只是用狗作为例子。但是让我们说,如果我将从主类运行validateDog和validateBreed,其中品种是从狗继承的,而狗是继承的从动物的语法上看,有什么不对? – marchemike 2012-07-14 09:11:20

相关问题