Универсальный 'TThis' для быстрых классов

У выполненных и клиентов на 32 и 64 бита.... иначе экземпляры проводника, запущенные от процессов на 32 бита (включая загрузку и сохраняют диалоговые окна), не будет меню Tortoise.

Также обновление последних 1.5.3 во время ответа.

11
задан Paul Alexander 5 November 2009 в 02:19
поделиться

1 ответ

Покопавшись в некоторых других 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();
12
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: