Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public class FrameImpl<Derived> : Rectangle<Derived>
{
Color _color;
public Derived SetColor(Color color)
{
_color = color;
return (Derived) this;
}
}
class Frame : FrameImpl<Frame>
{ /* здесь пусто, кроме может быть конструкторов */ };
public abstract class SerializerBase<TSerializer, TItem> where TSerializer : SerializerBase<TSerializer, TItem>, new()
{
public abstract void WriteAsBinary(TItem item, BinaryWriter writer);
public void Save(TItem item, BinaryWriter writer)
{
WriteAsBinary(item, writer);
}
public void Save(IList<TItem> items, BinaryWriter writer)
{
writer.Write(items.Count);
foreach (var item in items)
WriteAsBinary(item, writer);
}
public void Save(string name, TItem item, BinaryWriter writer)
{
writer.Write(name);
WriteAsBinary(item, writer);
}
}
var gps = new GeoPointSerializer();
gps.Save("Mount Kilimanjaro", gp, writer);
gps.Save(region, writer);
Применение паттерна CRTP в C#