Массивы являются ссылочными типами. Просто включите нестатическое свойство в базу и внедрите его в свои производные классы, создав статический член для всех экземпляров, на которые будут ссылаться. Накладные расходы действительно довольно малы. Я обещаю, вы не заметите.
О, и ReadOnlyCollection<string>
будет лучше, чем массив для этих имен. Примерно так:
public class BaseRecord {
public bool isDirty;
public IEnumerable<Object> items;
public ReadOnlyCollection<string> columnNames;
}
или
public class BaseRecord {
public bool isDirty;
public IList<Object> items;
public Object this[int index]
{
get { return items[index];}
set { items[index] = value;}
}
public ReadOnlyCollection<string> columnNames;
}
или с C # 4 ( при условии, что мое понимание динамики верное ):
public class BaseRecord {
public bool isDirty;
public IList<dynamic> items;
public dynamic this[int index]
{
get { return items[index];}
set { items[index] = value;}
}
public ReadOnlyCollection<string> columnNames;
}
Правда, я ставлю под сомнение преимущества этого класса. Интерфейс, который он предоставляет, дает только нетипизированный доступ к фактическим данным, и это не очень полезно. Вы можете попытаться исправить это с помощью дженериков, но затем вы получите что-то вроде этого:
public Record<T>
{
public bool isDirty;
public ReadOnlyCollection<string> columnNames;
public T data;
}
где каждый "T" - это совершенно другой класс с полями из одной таблицы. Он не дает вам хорошего синтаксиса, и к тому времени, когда вы реализуете эти другие классы, вы также можете напрямую связать имена столбцов и член isDirty.
Мне кажется, что лучшее решение - это когда я ранее упомянул "интерфейс". То, что вы действительно хотите, выглядит примерно так:
public IRecord
{
bool isDirty;
ReadOnlyCollection<string> columnNames;
}
или возможно :
public IRecord
{
bool isDirty;
ReadOnlyCollection<string> columnNames;
dynamic this[int index]
{
get;
set;
}
}