【问题标题】:Overriding method in Class Extending Collection with Generic C#使用通用 C# 在类扩展集合中覆盖方法
【发布时间】:2018-12-04 01:14:50
【问题描述】:

我正在做一些课程作业,但我不知道如何在从类扩展后重写方法。我正在尝试使用 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);
    }

    ...
}

视图模型:

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# 中有泛型时,如何覆盖扩展类中的方法?

【问题讨论】:

  • 阅读这个关于 New vs Override 关键字的问题。除非将基方法声明为 abstract(在抽象类上)或 virtual,否则您不能覆盖它们。
  • 另外,我建议在您的场景中解释“它不起作用”的实际含义。
  • @John 谢谢你回答了我的问题。我将对其进行编辑,以便其他人可以看到并尝试澄清。

标签: c# generics collections


【解决方案1】:

变化

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

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

解决问题。


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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2011-08-21
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多