更改HashSet原型C#

时间:2017-05-31 09:06:13

标签: c# hashset

我可以更改HashSet的原型吗?我想要实现的是创建HashSet以添加属性count,该属性将在每个.Add().Remove()操作期间更新。我认为这比迭代收集更好。我也想为SortedHash和Dictionary以及SortedDictionary做这件事(你明白了)。

编辑:通过原型我的意思就像在javascript中我可以说Array.prototype例如。我希望它与C#一样。

2 个答案:

答案 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.