【问题标题】:What is the type of object added by IEditableCollectionView?IEditableCollectionView 添加的对象类型是什么?
【发布时间】:2010-09-23 13:31:37
【问题描述】:

使用 IEditableCollectionView addNew() 方法添加对象相当不错。但是我不确定它与我的通用代码的效果如何。

我的基类有一个 ObservableCollection。根据用户想要看到的内容,可以用 DerivedA 或 DerivedB (或多个其他派生类型类)填充。它从来没有超过 1 种类型。我对此有以下问题,其中 1 号是主要问题。

1) 调用 addNew() 方法时添加了什么类型的对象。我猜是基数,但不确定。如果 Base 是抽象的呢?无论如何我可以确保它添加了一个特定的类型,或者它是否已经实现了它已经添加了最相关的类型?

2) 在使用派生类时,我是否要求 ObservableCollection 出现问题?

3) 派生类都单独实现 IEditableObject,但 Base 没有。我的愚蠢是错误的,因为我认为当你实现时你必须定义方法。我可以将它们定义为抽象,然后在派生类中覆盖它们,对吗?如果我不这样做,我会遇到 IEditableCollection 的麻烦。

更新:

我成功修复了第 3 项)基类实现 iEditableObject 并将抽象虚拟方法扔到它的派生类中。 addNew 方法不起作用,即使列表中填充了派生项。

我见过一种半解决方案。 .Net framework 4.0 实现了一个名为 AddNewItem 的新方法,您可以在其中定义要添加的项目。应该解决非无参数构造函数和基类的问题。但是我正在使用 3.5

我能做什么?

【问题讨论】:

    标签: c# observablecollection ieditableobject icollectionview ieditablecollectionview


    【解决方案1】:

    对于此类问题,很高兴记住 .net 框架代码不是黑匣子,您可以使用 ILSpy 对其进行反汇编,以查看它在做什么,或者 Microsoft 如何让某些东西发挥作用。我建议你看一下4.0的方法,看看3.5中是否不能为自己的目的复制它,并将其添加为扩展方法。

    【讨论】:

    • 我更新到 .net 4.0 所以这不是一个真正的问题。但你的答案很适合在这里绊倒的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多