Если вам не нужен строго типизированный доступ к свойствам, я бы использовал словарь пар ключ-значение для строк или объектов, если вам нужна большая гибкость.Вы можете сделать их виртуальными, чтобы унаследованные классы могли переопределять всех членов или, при желании, добавлять / удалять из Словаря.Если вы хотите строго типизированный доступ, вы можете использовать класс PropN в качестве ключа.Если у вас действительно 90 различных типов документов, вы можете добавить словарь в качестве аргумента конструктора.Но если действительно много разных типов документов, они будут по-разному вести себя, и, вероятно, предпочтительным подходом будет наследование и переопределение некоторых значений по умолчанию базового документа.
public class BaseDoc
{
protected virtual Dictionary<string, string> Props { get; } = new Dictionary<string, string>()
{
{ "PropA", null },
{ "PropB", "defXyz" },
{ "PropC", "defCCC" }
};
protected virtual Dictionary<PropN, string> Props2 { get; } = new Dictionary<PropN, string>()
{
{ PropN.PropA, null },
{ PropN.PropB, "defXyz" },
{ PropN.PropC, "defCCC" }
};
public IReadOnlyDictionary<string, string> PropsReadOnly => Props;
public IReadOnlyDictionary<PropN, string> Props2ReadOnly => Props2;
}
public class PropN
{
private PropN(string name) => Name = name;
public string Name { get; }
public static readonly PropN PropA = new PropN("PropA");
public static readonly PropN PropB = new PropN("PropB");
public static readonly PropN PropC = new PropN("PropC");
}