Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: DRappОтветов: 4

Как я могу сделать ссылку на 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

Ответы

Ответ 1 · рейтинг 2 · veggerby

Разве вам не нужен интерфейс, например IDbCommand а>

Ответ 2 · рейтинг 1 · Daniel A. White

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

using SomeClass = SomeOtherClass;

Ответ 3 · рейтинг 1 · Guffa

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

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

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

Ответ 4 · Adam Robinson

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы