我可以更改HashSet的原型吗?我想要实现的是创建HashSet以添加属性count
,该属性将在每个.Add()
和.Remove()
操作期间更新。我认为这比迭代收集更好。我也想为SortedHash和Dictionary以及SortedDictionary做这件事(你明白了)。
Array.prototype
例如。我希望它与C#一样。
答案 0 :(得分:7)
不,您无法在C#中更改原型,因为C#不是原型语言。但是,HashSet<T>
已经一个.Count
属性。如果您愿意,可以使用扩展方法添加额外的方法。扩展属性可能会以不太远的语言更新。或者:子类并在子类中添加属性。
答案 1 :(得分:2)
您没有必要,因为所有这些Collection都已经拥有Count
属性,可以完全满足您的需求。
关于“改变原型”:不。在C#中没有这样的东西。最接近的是扩展方法。
假设您想要向HashSet添加一个返回计数的方法:
static class HashSetExtensions // needs to be static
{
public static int GetCount( this HashSet set ) // notice the 'this' which indicates an extension method
{
int count = set.Count; // you can access the public interface of the type in your extension method
return count;
}
}
用法是:
var myHashSet = new HashSet<int>();
var count = myHashSet.GetCount(); // GetCount is the extension method and you call it just like you call a normal method.