Collections Data Structure C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace DACU.VkontakteApi.Collections
{
  class VKParametrCollection: SortedList
  {
    private string _formatedString = "";
    private bool _isChanged;
    public new void Add(string key,string value)
    {
      if (!ContainsKey(key))
      {
        base.Add(key, value);
        _isChanged = true;
      }
    }
    public new void Clear()
    {
      _isChanged = true;
      _formatedString = "";
      base.Clear();
    }
    public new void Remove(string key)
    {
      _isChanged = true;
      base.Remove(key);
    }
    public new void RemoveAt(int index)
    {
      _isChanged = true;
      base.RemoveAt(index);
    }
    public void ForEach(Action action)
    {
      if (action == null)
        throw new ArgumentNullException("action");
      for (int i = 0; i < Keys.Count; i++)
        action(Keys[i],this[Keys[i]]);
    }
    public string ToFormatedString(bool withAmp=false)
    {
      if (!_isChanged)
        if (!String.IsNullOrWhiteSpace(_formatedString))
          return _formatedString;
      var sb = new StringBuilder();
      if (withAmp)
        ForEach((key, value) => sb.AppendFormat("&{0}={1}",key, value));
      else
        ForEach((key, value) => sb.AppendFormat("{0}={1}", key, value));
      _isChanged = false;
      return _formatedString = sb.ToString();
    }
  }
}