У меня есть один базовый класс, который используется для объявления общих структур данных, которые имеют фиксированную длину в блоке данных:
public abstract class FixedLengthDataItem
{
// a static field here to store the fixed length?
public sealed void LoadFromBytes(byte[] data)
{
// Check the fixed length here
DoStuff(data, offset);
}
protected abstract void DoStuff(byte[] data);
}
Может быть много структур данных, которые имеют фиксированную длину и мое намерениеэто описать их в подклассах.
Я хотел бы знать, есть ли возможность передавать информацию о фиксированной длине при объявлении наследования в дочерних классах:
public class ChildClass : FixedLengthDataItem // Specific syntax here?
{
public override void DoStuff(byte[] data)
{
// Some stuff
}
}
Я не могу найти такой синтаксис, как : FixedLengthDataItem(2)
или : FixedLengthDataItem<2>
, который позволил бы установить значение статического поля, которое было бы объявлено в родительском классе и могло бы использоваться для "общей" проверки длины в методе LoadFromBytes
(2 в моем примере).
Если нет способа сделать это, какой может быть разумный способ позволить кому-либо писать подклассы, удостоверяясь, что проверка, выполняемая в методе LoadFromBytes
, проверяет правильностьвещь?
Я думал о чем-то вроде:
private readonly int _size;
protected FixedLengthDataItem(int size) { _size = size; }
в базовом классе.И:
public ChildClassFoo() : base(2) { } // or
public ChildClassBar() : base(3) { } // etc.
в дочернем классе (ах).Но при этом:
- конструктор должен быть объявлен в каждом производном классе,
- важнее: в каждом объекте будет существовать поле
size
, тогда как для всехя думаю, что экземпляры каждого производного класса не очень мудры.