我是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没有显示。
什么似乎是问题?
答案 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
是基类,并在派生类中重写它。