Хорошо, терпите меня, парни и девушки, пока я учусь. Вот мой вопрос.
Я не могу понять, почему я не могу переопределить метод из родительского класса. Вот код из базового класса (да, я украл код Java из книги ООП и пытаюсь переписать его в C #).
using System;
public class MoodyObject
{
protected String getMood()
{
return "moody";
}
public void queryMood()
{
Console.WriteLine("I feel " + getMood() + " today!");
}
}
и вот мои два других объекта, которые наследуют базовый класс (MoodyObject):
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();
}
}
}
Как видите, довольно простые вещи, но вот результат:
Как чувствует себя капризный объект сегодня?
Сегодня я чувствую себя угрюмо!
Как грустный объект чувствует себя сегодня? я
чувствовать себя угрюмым сегодня! вах ... * 1020 громко рыдать или смеяться *
Как чувствует себя счастливый объект сегодня?
Я чувствую себя угрюмым сегодня! hehehehehehe.
Нажмите любую клавишу для продолжения . , .
Не так, как я ожидал. Я попытался сделать базовый метод виртуальным и вызвать переопределение при попытке переопределить его, и это просто вызывает у меня эту ошибку "не может переопределить унаследованный член" MoodyObject.getMood () ', потому что он не помечен как виртуальный, абстрактный или переопределенный ". Я также попробовал это без виртуального и переопределения, и он думает, что я пытаюсь скрыть базовый метод. Опять же, я новичок в ООП и буду признателен за любые рекомендации.
Отредактировано ДОБАВИТЬ: Я нашел это! MoodyObject.cs был только «элементом решения» в обозревателе решений, а не элементом «ConsoleApplication1». Я перетащил его туда, где он был в проводнике решений и вуаля! Это работает сейчас. Я пометил ответ Люка ниже как ответ, потому что он предложил помощь, в которой я нуждался, чтобы добраться туда, где я ее решил ... Я здесь многому учусь. Это удивительно, и вы, ребята, и девушки сумасшедшие умные!