Вы не можете, в основном. typeof (...) - это , что вам нужно использовать.
Имейте в виду, что если вы попытаетесь использовать:
Type type = MyDerivedType.SomeStaticProperty;
который объявлен в MyBaseType
, что в итоге будет скомпилировано в
Type type = MyBaseType.SomeStaticProperty;
в любом случае. Статические члены в основном не полиморфны. Если вы попытаетесь использовать их полиморфно, вы столкнетесь с такими проблемами.
РЕДАКТИРОВАТЬ: Таким образом, из вашего редактирования, похоже, что вы пытаетесь сделать точно такой же тип вещи, с
MyEntity.TableName
вместо
EntityBase.TableName
Это просто не сработает. Компилятор выдаст код для получения EntityBase.TableName. Среда выполнения не имеет понятия «текущий класс». Здесь нет контекста.
В основном вам нужно изменить свой дизайн. Если вы хотите использовать наследование, вам может потребоваться параллельная иерархия - одна для метаданных (например, имена таблиц), а другая для реальных объектов. Так что у вас будет что-то вроде:
public class MyEntity : EntityBase<MyEntityType>
где MyEntityType наследуется от EntityType в параллельной иерархии. Тогда вы сможете использовать наследование в иерархии метаданных.
В качестве альтернативы, просто сделав EntityBase универсальным, вы сможете получить тип сущности, о которой вы говорите:
public class MyEntity : EntityBase<MyEntity>
Я знаю, что вы сказали, что не хотите использовать дженерики, но поскольку то, что вы хотите сделать, просто не сработает, вы должны, по крайней мере, рассмотреть это ...