Я искал шаблон, чтобы обеспечить как поточно-безопасную, так и небезопасную версию одного и того же класса. Технические аспекты этого довольно очевидны. Я предполагаю, что надеялся найти соглашения об именах / доступе и т. Д.
Итак, я нахожу этот шаблон повсюду в пространстве имен 'Systems.Collections':
public class WhatEv
{
private class SyncWhatEv : WhatEv
{
// overrides IsSyncronized = true
// overrides whatever else to make it thread safe
}
public virtual bool IsSynchronized
{
get { return false; }
}
public static WhatEv Synchronized(WhatEv whatEv)
{
return new SyncWhatEv(whatEv);
}
}
Есть несколько классов, реализующих это: HashTable, Queue, ArrayList, Stack и т. Д. Я понимаю наследование. Но зачем делать его частным вложенным классом и заставлять пользователя прыгать через обруч, чтобы добраться до него? Есть ли преимущества в использовании этого способа?