3

授業は初めてですので、無知です。

基本クラスであるPetクラスがあります。私には犬と猫の2つの子供クラスがあります。私がやろうとしているのは、CatメソッドとDogメソッドに「Woof!」と言ってPetメソッドをオーバーライドさせることです。と「ニャー!」話す代わりに。次に、別の形式で、ボタンを押すだけで情報(名前、色、話し方)を印刷する必要があります。

       class Pet
    {
        protected string name, color, food;

        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public string Color
        {
            get 
            {
                return color;
            }
            set
            {
                color = value;
            }
        }
        public string Food
        {
            get
            {
                return food;
            }
            set
            {
                food = value;
            }
        }
        public void speak(string s)
        {
            s = "Speak";
            MessageBox.Show(s);
        }

        public Pet(string name, string food, string color)
        {
            //Constructor
            this.Food = food;
            this.Name = name;
            this.Color = color;
        }




    class Dog : Pet
    {

        public Dog(string name, string food, string color)
            : base(name, food, color)
        {

        }

        protected override void speak()
        {

        }

    }

}

(犬とほとんど同じなので、猫は省略しました)

「エラー1'Lab12.Cat.speak()':'public'継承メンバー'Lab12.Pet.speak()'をオーバーライドするとアクセス修飾子を変更できません」というエラーが表示され続けます

私は何が間違っているのですか?私はそれがどこかの保護レベルに関係していることを知っています、そして私は物事をパブリックから保護またはプライベートに切り替え続けます、しかしそれは何も修正していません。助けて、誰か?

4

4 に答える 4

4

Speak()は元々公開されていたため、公開しておく必要があります。「アクセス修飾子を変更することはできません」(パブリックとプライベート)。

また、非仮想メソッドまたは静的メソッドをオーバーライドすることはできません。オーバーライドされる基本メソッドは、仮想、抽象、またはオーバーライドである必要があります。

読んでください:http://msdn.microsoft.com/en-us/library/ebca9ah3 (v = vs.100).aspx

于 2012-12-03T01:07:26.407 に答える
1

Speakメソッドは、オーバーライドするために基本クラスで仮想である必要があります

ペットクラス

  public virtual void speak(string s)
  {
      s = "Speak";
      MessageBox.Show(s);
  }

同じ修飾子を使用する必要があります(public)

犬のクラス

  public override void speak(string s)
  {
     base.speak(s);
  }
于 2012-12-03T01:10:39.707 に答える
0
protected override void speak()
    {

    }

サブクラスでpublicメソッドをに変更しているためです。protected

メソッドをオーバーライドするときにアクセスのタイプを変更できないというエラーが表示されます。したがって、これを修正するには、メソッドをパブリックとして保持しCatDog

public override void speak()
    {

    }
于 2012-12-03T01:07:15.073 に答える
-1

そのエラーが発生する理由は、親クラスPetから「speak」メソッドを継承しているためです。あなたはspeak()メソッドをパブリックメソッドとして宣言し、それを継承して保護されています。それを継承し、Dog、Cat、Monkeyクラスでオーバーライドしたら、公開したままにしておくことをお勧めします。

于 2012-12-03T01:11:10.580 に答える