我有一个关于从继承的类向Collection<T>
添加对象的问题。
以下是一些示例基类代码:
public virtual Collection<CustomProperty> customProperties
{
get
{
return _customProperties;
}
set
{
_customProperties = value;
}
}
以下是一些示例继承的类代码:
public override Collection<CustomProperty> customProperties
{
get
{
return base.customProperties;
}
set
{
base.customProperties = value;
}
}
在上面的代码中,当添加从CustomProperty
继承的对象时,检查对象是否属于某种类型的最佳方法是什么,然后如果对象属于某种类型则调用函数?
我可以编写一个继承自Collection<CustomProperty>
的函数并覆盖protected virtual void InsertItem(int index, T item)
函数,但想知道是否有其他方法。
答案 0 :(得分:1)
Collection<T>
是List<T>
周围的可扩展包装器。继承它并覆盖InsertItem
是控制这种事情的确切方法。
你有什么理由需要另一种方式吗?
这是我在工具箱中多次使用过的小帮手。
class FilteringCollection<T> : Collection<T>
{
private readonly Func<T, bool> Filter;
FilteringCollection(Func<T, bool> filter)
{
Filter = filter;
}
protected override InsertItem(int index, T item)
{
if(Filter(item))
base.InsertItem(index, item);
else
;//either ignore or throw an exception here
}
}
//Or perhaps
class TypeSensitiveCollection<T, TSpecial> : Collection<T>
where TSpecial : T
{
public event EventHandler<TSpecial> SpecialMemberAdded;
TypeSensitiveCollection()
{
}
protected override InsertItem(int index, T item)
{
if(item is TSpecial)
{
if(SpecialMemberAdded != null)
SpecialMemberAdded(this, item as TSpecial)
}
base.InsertItem(index, item);
}
}