Определение собственного TYPE на основе существующего типа

Как я могу сделать ссылку на TYPE, чтобы впоследствии использовать имя моей ссылки... В самой простой форме...

MyInt -- производное от int

Затем в другом месте я бы сослался на MyInt. Суть в том, что мне нужно, чтобы это "#define" соответствовало определению класса, которое было бы подклассом и могло бы быть другого типа. Фактическое намерение

MyTypeSQLCmd = OleDbCommand
OR
MyTypeSQLCmd = SQLiteCommand

и мой подкласс будет просто ссылаться и сможет создать новый MyTypeSQLCmd();

--- позвольте мне уточнить немного больше.

У меня есть один класс, который подключается к базе данных типа OleDB. У меня есть ДРУГОЙ класс, который подключается к базе данных SQLite.

У меня есть ДРУГОЙ класс, который будет производным от ЛЮБОГО из вышеперечисленных, но будет иметь дополнительные функции. Таким образом, вместо того, чтобы знать, к какому бэкенду я буду подключаться, я не хочу иметь IF повсюду, например...

if(connectingToSQLite)
  MyCmd = new SQLiteCommand();
else
  MyCmd = new OleDbCommand();

поскольку впоследствии общие доступные методы, которые мне нужны, - это те же ссылки, такие как

MyCmd.Параметры.Добавить(...)

Итак, я не могу предварительно объявить переменную как один «тип» или другой, например

Оледбкоммандмикмд; SQLiteCommand MyCmd;

Мне нужен только один экземпляр, поэтому я надеялся получить тип с псевдонимом, который будет принят и позволит продолжить работу без ошибок компилятора.


types c#
person DRapp    schedule 06.08.2009    source источник


Ответы (4)



arrow_upward
1
arrow_downward

Вы можете либо наследовать от него, либо использовать оператор using.

using SomeClass = SomeOtherClass;
person Daniel A. White    schedule 06.08.2009

arrow_upward
1
arrow_downward

Используйте дженерики:

class SubClass<MyTypeSQLCmd> where MyTypeSQLCmd : IDbCommand, new {
   ...
}

Теперь класс может создавать экземпляры типа и использовать все методы интерфейса IDbCommand. Вы можете создавать экземпляры класса для любого из типов команд базы данных.

person Guffa    schedule 06.08.2009

arrow_upward
0
arrow_downward

Если вы ищете что-то похожее на C typedef, то, хотя это возможно с оператором using в верхней части файла, это, как правило, не самое идеальное решение. Идея для таких ситуаций состоит в том, чтобы «запрограммировать интерфейс». А именно, вы находите суперкласс или интерфейс, реализующий искомую функциональность (в данном случае либо System.Data.Common.DbCommand, либо System.Data.IDbCommand соответственно) и программируете его. Затем вы создаете более конкретный тип (например, SqlCommand или OleDbCommand, который представляет конкретную реализацию для использования.

person Adam Robinson    schedule 06.08.2009