使用通用C#的类扩展集合中的重写方法

时间:2018-12-04 01:14:50

标签: c# generics collections

我正在做一些课程作业,但是我想不出从类扩展后如何重写方法。我正在尝试使用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#中存在泛型时,如何覆盖扩展类中的方法?

1 个答案:

答案 0 :(得分:1)

更改

public ObservableCollection<Train> Trains => Facades.TrainList.Instance;

public Facades.TrainList Trains => Facades.TrainList.Instance;

解决了问题。


这里的问题是ViewModel将对象强制转换为ObservableCollection。因此,不会调用新方法。

参考:New vs override keywords(感谢@John)