Я делаю несколько курсовых работ и не могу понять, как переопределить метод после расширения из класса. Я пытаюсь переопределить его, используя ключевое слово new, но базовый метод все еще вызывается.
public class TrainList : ObservableCollection<Train>
{
...
public new void Add(Train train)
{
Console.WriteLine("Contains ID: " + ContainsId(train.Id).ToString());
if (!ContainsId(train.Id)) base.Add(train);
}
...
}
ViewModel:
public class AddTrain
{
// Possible values for selectable items
public ObservableCollection<Station> Stations => Facades.StationList.Instance;
public ObservableCollection<Train> Trains => Facades.TrainList.Instance;
public void InsertTrain()
{
....
Train newTrain = trainBuilder.build();
Console.WriteLine("Created an object");
Trains.Add(newTrain);
}
}
Как можно переопределить метод из расширенного класса, если в C# есть дженерики?
Также я рекомендую объяснить, что на самом деле означает «это не работает» в вашем сценарии.
@John Спасибо, что ответил на мой вопрос. Я отредактирую его, чтобы другие люди могли его увидеть и попытаться уточнить.





Изменение
public ObservableCollection<Train> Trains => Facades.TrainList.Instance;
к
public Facades.TrainList Trains => Facades.TrainList.Instance;
решает проблему.
Проблема здесь в том, что ViewModel преобразует объект в ObservableCollection. Следовательно, новый метод не вызывается.
Ссылка: Новые и переопределяемые ключевые слова (Спасибо @John)
Прочтите этот вопрос о ключевых словах Новое против переопределения. Вы не можете переопределить базовые методы, если они не объявлены как
abstract(в абстрактном классе) илиvirtual.