0

我对 c# 编程真的很陌生,所以如果我的术语有误,请纠正我。

我想问一下,是否可以使用来自同一个对象的 2 个不同的类。代码如下:

    //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 没有显示。

似乎是什么问题?

4

1 回答 1

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为基类并在派生类中覆盖它。

于 2012-07-14T09:04:40.010 回答