わかりました、私が学んでいる間、私と一緒に待ってください。これが私の質問です。
親クラスのメソッドをオーバーライドできない理由がわかりません。これが基本クラスのコードです (はい、OOP の本から Java コードを盗み、C# で書き直そうとしています)。
using System;
public class MoodyObject
{
protected String getMood()
{
return "moody";
}
public void queryMood()
{
Console.WriteLine("I feel " + getMood() + " today!");
}
}
基本クラス (MoodyObject) を継承する他の 2 つのオブジェクトを次に示します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class SadObject: MoodyObject
{
protected String getMood()
{
return "sad";
}
//specialization
public void cry()
{
Console.WriteLine("wah...boohoo");
}
}
}
と:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class HappyObject: MoodyObject
{
protected String getMood()
{
return "happy";
}
public void laugh()
{
Console.WriteLine("hehehehehehe.");
}
}
}
ここに私のメインがあります:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MoodyObject moodyObject = new MoodyObject();
SadObject sadObject = new SadObject();
HappyObject happyObject = new HappyObject();
Console.WriteLine("How does the moody object feel today?");
moodyObject.queryMood();
Console.WriteLine("");
Console.WriteLine("How does the sad object feel today?");
sadObject.queryMood();
sadObject.cry();
Console.WriteLine("");
Console.WriteLine("How does the happy object feel today?");
happyObject.queryMood();
happyObject.laugh();
}
}
}
ご覧のとおり、かなり基本的なものですが、出力は次のとおりです。
ムーディーなオブジェクトは今日どのように感じますか? 今日は気分が悪い!
悲しいオブジェクトは今日どのように感じますか? 今日は気分が悪い!うわ…ブーフー
今日の幸せなオブジェクトはどう感じますか? 今日は気分が悪い!ふふふふふ。何かキーを押すと続行します 。. .
私が期待したようではありません。基本メソッドを仮想にして、オーバーライドしようとしたときにオーバーライドを呼び出してみましたが、「仮想、抽象、またはオーバーライドとマークされていないため、継承されたメンバー 'MoodyObject.getMood()' をオーバーライドできません」というエラーが表示されます。また、仮想およびオーバーライドなしで試してみましたが、基本メソッドを非表示にしようとしていると考えられます。繰り返しますが、私は OOP を初めて使用するので、ガイダンスをいただければ幸いです。
追加するために編集:見つけました!MoodyObject.cs は、「ConsoleApplication1」アイテムではなく、ソリューション エクスプローラーの「ソリューション アイテム」に過ぎませんでした。ソリューション エクスプローラーの該当する場所にドラッグすると、できあがりです。それは今動作します。以下のLucの回答を回答としてマークしました.解決した場所にたどり着くために必要な助けを提供してくれたからです...私はここで多くのことを学んでいます. それは驚くべきことであり、皆さんと女の子は頭がおかしいです!