既存のクラスの型コンバータを拡張(または置き換える)

既存のクラスの型コンバータを動的に拡張または置き換える方法を紹介します。

using System;
using System.ComponentMode;
using System.Drawing;

namespace Test
{
  static class Program
  {
    [STAThread]
    static void Main()
    {
      // Colorの型コンバータを動的に変更
      TypeDescriptionProvider provider = TypeDescriptor.AddAttributes( typeof( Color ), new TypeConverterAttribute( typeof( 自前の型コンバータ ) ) );

      // なにか処理

      // Colorの型コンバータを元に戻す
      TypeDescriptor.RemoveProvider( provider, typeof( Color ) );
    }
  }
}

↑のようにすることで、
TypeDescriptor.AddAttributesしてからRemoveProviderするまでのあいだ、
TypeDescriptor.GetConverterで取得できる型コンバータを置き換えることができます。
.NET Frameworkの既存の型コンバータを拡張する場合は、
派生クラスを作り、↑の方法で置き換えることで拡張することができます。