0

我在我的应用程序中使用ObservableCollectionDataBindingWPF ,我将集合绑定到DataGridsComboBoxes。由于需要,我需要根据条件从集合中删除对象,因此我实现了RemoveAll功能,例如List,使用Extension method.

这篇文章指定了Inheritanceover的一些优点,Extension methods但对我的情况不是很具体,因为这是我需要添加的唯一方法,我不打算Extension method为 Collection 添加另一个方法。

我想知道按Extension method原样实现它对我来说是否更好,或者我应该考虑继承该类并将其添加为Instance method

另外,我想知道两者之间是否有任何性能差异,因为在提到的帖子中没有讨论过。

4

3 回答 3

4

如果您计划仅增强 ObservableCollection 而不仅仅是 RemoveAll(),则将其子类化并添加您的功能。如果您想将 RemoveAll() 添加到不止一个 ObservableCollection,那么您可以创建一个扩展方法来处理不仅仅是 ObservableCollections,而是通过在层次结构中定位 IEnumerable 或另一个通用父级。在该方法中,您可以测试该集合是否支持 CollectionChanged,并对其进行适当处理。

这里没有正确或错误的答案,只要适合您的需求即可。

于 2012-07-27T13:51:10.347 回答
2

为了一种方法,我会使用扩展方法。在这种情况下,这意味着您的代码可以继续使用ObservableCollection<T>而无需维护自定义类型。

扩展方法在编译时简单地归结为静态方法调用,所以我无法想象性能比继承更差。如果有的话,它应该是相同的或更好的。

个人偏好通常是驱动选择扩展方法的原因。

于 2012-07-27T13:54:13.560 回答
1

使用 Extensionmethod,您可以扩展接口,从而扩展该接口的每个实现者。

我会用System.Collections.IList. System.Collections.IList到处都在使用...

public class static Extension
{
   public static void RemoveAll(this System.Collections.IList list)
   {
      ...
   }
}

这将扩展几乎所有集合实现。

于 2012-07-27T13:52:16.743 回答