C # Generics - пытается найти название шаблона - PullRequest
4 голосов
/ 07 мая 2011

Я пытался найти название шаблона использования обобщений в C #, и я не знаю лучшего ресурса, чем переполнение стека!

Что я делаю, так это создание универсальной базыклассы, в которые непосредственно передается производный класс - я искал примеры этого или название шаблона, и я надеялся, что один из великих членов этого сообщества сможет мне помочь.

Я сделалописание того, как это работает на http://www.mobiusbay.com/home/alittlesomethingimcallingcascadinggenerics, но если вы не хотите читать его там, приведем пример:

public abstract class IndexedMemberBase<TDerivedClass> : IDisposable where 
    TDerivedClass : IndexedMemberBase<TDerivedClass>
{
    #region Declarations & Properties
    private static List<TDerivedClass> derivedInstances = new List<TDerivedClass>();
    public static List<TDerivedClass> DerivedInstances
    {
        get { return derivedInstances; }
    }
    #endregion

    #region Constructor(s)
    public IndexedMemberBase()
    {
        if (derivedInstances == null) derivedInstances = new List<TDerivedClass>();
        derivedInstances.Add((TDerivedClass)this);
    }
    #endregion

    #region Methods
    public void Dispose()
    {
        if (derivedInstances.Contains(this) == true)
        {
            derivedInstances.Remove((TDerivedClass)this);
        }
    }
    #endregion
}

Это базовый класс, и производный класс может бытьневероятно просто - например:

public class IndexMember : IndexedMemberBase<IndexMember>
{
    //Add all the crazy business you could ever want!
}

Этот фрагмент кода выбрасывает указатель на каждый экземпляр класса dervied в статическую коллекцию для общего использования - коллекция отличается для каждого производного класса, поэтому вы не будетеесть конфликты от него, существующие статически в базе.Я считаю, что это весьма полезно в моих проектах, и я надеюсь, что кто-то еще сможет найти его применение.

Важно отметить, что производный класс передает себя в общей сигнатуре базовому классу.

Если кто-то видел этот шаблон в использовании или знает имя для него - мне бы очень хотелось увидеть некоторые примеры или хотя бы назвать его по правильному имени!Сейчас я называю это рекурсивными дженериками, поскольку они, кажется, подходят, но я уверен, что есть более подходящее имя!

Большое спасибо за вашу помощь!

Адам

Ответы [ 2 ]

4 голосов
/ 07 мая 2011

Эрик Липперт написал об этом в своем блоге .

Он называется шаблоном любопытно повторяющихся шаблонов, хотя это относится к C ++, где они шаблоны , а не универсальные .

4 голосов
/ 07 мая 2011

Это называется Любопытно повторяющийся шаблон

(а по какой-то причине он очень и очень известен на SO?)

...