Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何知道何时调用可观察集合中的基方法或重写方法_C#_Wpf - Fatal编程技术网

C# 如何知道何时调用可观察集合中的基方法或重写方法

C# 如何知道何时调用可观察集合中的基方法或重写方法,c#,wpf,C#,Wpf,我在看教程的时候有一些问题 我想知道当我重写方法时,如何知道是否需要调用基方法 public CustomerCollection(IEnumerable<Customer> customers, OMSEntities context) : base(customers) 每个方法中的两行是做什么的?为什么需要类似的方法。如果我覆盖了delete和add的方法,为什么不也更新呢?当你使用基本方法时,你调用基本方法只是修饰基本方法功能的附加功能,当你批量替换它的功能时,你不调用基本

我在看教程的时候有一些问题

我想知道当我重写方法时,如何知道是否需要调用基方法

public CustomerCollection(IEnumerable<Customer> customers, OMSEntities context) : base(customers)

每个方法中的两行是做什么的?为什么需要类似的方法。如果我覆盖了delete和add的方法,为什么不也更新呢?

当你使用基本方法时,你调用基本方法只是修饰基本方法功能的附加功能,当你批量替换它的功能时,你不调用基本方法


如果您不知道基方法的作用,您就不会重写它,因此在了解它的作用以及重写它的原因时,您应该能够根据以下内容做出此决定。

对于问题的第一部分,如果您不添加
:base(参数)
在构造函数的末尾,它实际上会在幕后为您放置一个
:base()
。如果没有
base()。您需要一系列构造函数,一直到
object()
。添加
:base(parameter)
只是选择默认构造函数以外的其他构造函数的一种方式


第二部分。一个很好的经验法则是,如果您要覆盖一个方法以提供某种附加功能,那么您也应该调用base方法(这样您就可以获得它的功能),如果您试图替换该功能而不是添加到它,那么您不需要调用base(在替换它时:))。

那么第二个问题呢?“每个方法中的2行是做什么的?为什么需要类似的方法。如果我覆盖删除和添加的方法,为什么不也更新?”@jiewmeng:可能是因为this.context已经引用了该对象,所以对它的更改将显示在this.context对象上,所以不需要添加或删除它,因此,基类更新该项就足够了。我不能说好像我知道“this.context”确切地指的是什么。context是我的数据模型的“实体容器名称”,我不知道第二个问题的含义是什么?“每个方法中的2行是做什么的?为什么需要类似的方法。如果我覆盖了delete和add的方法,为什么不也更新?”第一行是在当前类中查找对象上下文(如果是受保护的或公共的项,可以在自定义类中,也可以在父类中)或者调用AddToCustomers并将cust传递给它,或者调用DeleteObject并传递这个[index]。然后,它将调用传递相同参数的函数的基本版本。这基本上就像复制第一行,编辑基本函数,然后将其粘贴到顶部
protected override void InsertItem(int index, Customer cust)
{
    this.context.AddToCustomers(cust);
    base.InsertItem(index, cust);
}

protected override void RemoveItem(int index)
{
    this.context.DeleteObject(this[index]);
    base.RemoveItem(index);
}