我正在做一些课程作业,但是我想不出从类扩展后如何重写方法。我正在尝试使用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#中存在泛型时,如何覆盖扩展类中的方法?
答案 0 :(得分:1)
更改
public ObservableCollection<Train> Trains => Facades.TrainList.Instance;
到
public Facades.TrainList Trains => Facades.TrainList.Instance;
解决了问题。
这里的问题是ViewModel将对象强制转换为ObservableCollection。因此,不会调用新方法。
参考:New vs override keywords(感谢@John)