У выполненных и клиентов на 32 и 64 бита.... иначе экземпляры проводника, запущенные от процессов на 32 бита (включая загрузку и сохраняют диалоговые окна), не будет меню Tortoise.
Также обновление последних 1.5.3 во время ответа.
Покопавшись в некоторых других API-интерфейсах, я нашел, как это сделать. Это не так чисто, но работает хорошо. Обычно вы вводите промежуточный базовый класс для каждого производного типа, который хотите использовать, и он передает тип «TThis» в реальную реализацию.
public class FieldBase<T,TThis>
where TThis : FieldBase<T,TThis>
{
private string _name;
public TThis Name( string name )
{
_name = name;
return (TThis)this;
}
}
public class Field<T> : FieldBase<T,Field<T>>{}
public class SpecialFieldBase<T,TThis> : FieldBase<T,TThis>
where TThis : SpecialFieldBase<T,TThis>
{
public TThis Special(){ return (TThis)this; }
}
public class SpecialField<T> : SpecialFieldBase<T,SpecialField<T>>{}
// Yeah it works!
var specialField = new SpecialField<string>()
.Name( "bing" )
.Special();