使用相同的对象调用2个不同的类

时间:2012-07-14 09:01:39

标签: c# arrays class object

我是c#编程的新手,所以如果我的术语错了,请纠正我。

我想问一下,如果可以使用同一个对象中的两个不同的类。代码是这样的:

    //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时运行它。我还需要让Breed成为Dog的派生类,而Dog则是派生的动物类。似乎没有语法错误。但validateBreed没有显示。

什么似乎是问题?

1 个答案:

答案 0 :(得分:0)

  

需要让Breed成为Dog的派生类

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

您可以在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是基类,并在派生类中重写它。