【问题标题】:calling 2 different classes with the same object用相同的对象调用 2 个不同的类
【发布时间】:2012-07-14 09:01:39
【问题描述】:

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

似乎是什么问题?

【问题讨论】:

  • 您的do while 不会很快结束。除此之外,柜台上的狗将被同一地点的品种覆盖。这不是 C# 特定的。

标签: c# arrays class object


【解决方案1】:

需要让 Breed 是 Dog 的派生类

这是一个错误的要求。品种不是一种“狗”,品种是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 定义为基类并在派生类中覆盖它。

【讨论】:

  • 哦,我明白了。对不起,我的例子。我只是用狗作为例子。但是让我们说如果我会从主类运行 validateDog 和 validateBreed,其中品种是继承的来自狗,而狗是从动物继承的,从句法上讲,有什么问题?
猜你喜欢
  • 2023-03-17
  • 2012-08-13
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多