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 を Animal の派生クラスにする必要があります。構文エラーはないようです。しかし、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 に答える