При создании класса к нему можно применить атрибут TypeConverter s.t. используя TypeDescriptor.GetConverter(typeof(T)) вернуть преобразователь пользовательского типа. Например:
[TypeConverter(typeof(FooConverter))]
public class Foo
{...}
public class FooConverter: TypeConverter
{...}
var tc = TypeDescriptor.GetConverter(typeof(T)); //returns a FooConverter instance.
Это работает до тех пор, пока класс создан нами. Но как предоставить собственный TypeConverter для класса, исходный код которого нельзя изменить? Например, как можно предоставить собственный TypeConverter для класса System.Version (у которого его нет)?