Почему бы вам просто не использовать два класса?
Тип будет основным классом с полем экземпляра подтипа (может быть нулевым).
class Type
{
public SubTypeClass SubType {get; set;}
public string Id {get;set;}
}
Я не хочу использовать класс, потому что я
пытаясь сделать это настраиваемым. то есть
мы должны быть в состоянии добавить новый столбец
в таблице типов и приложения
должен забрать новый столбец
Я бы рекомендовал против этого, если только в этом нет реальной необходимости. Обычно, если изменение таблицы базы данных является действительно веской причиной, и дизайн приложения должен быть пересмотрен ... если у вас есть таблицы, которые могут безумно увеличивать столбцы, то ваш дизайн базы данных, вероятно, не очень хорош и, конечно, не формализован (я предполагаю, что стандартные базы данных SQL ).
Примите во внимание, что sub_type не очень хорошее определение, и я предполагаю, что вы используете его в качестве примера для категоризации ... не пытайтесь создать структуру данных «серебряной пули», как вы ее обнаружите приносит больше проблем, которые он решает. С хорошим дизайном, изменяющим один класс в случае изменения данной связанной таблицы данных, это не такая уж большая проблема, как наличие хорошего для всех классов, который едва работает лучше, чем прямые запросы SQL.