Определение типа события DataTable в C ++ - PullRequest
1 голос
/ 01 июня 2011

Я создаю модель наследования для обработки событий (особенно для DataTables и XmlNode).

У меня есть суперкласс EventManager со следующими виртуальными функциями:

DataChanged(EventArgs *arg)
DataChanging(EventArgs *arg)
DataInserted(EventArgs *arg)
DataInserting(EventArgs *arg)
DataRemoved(EventArgs *arg)
DataRemoving(EventArgs *arg)

, а также производные классы DataTableManager и XmlNodeManager.

DataTable аргументы события различаются (например, DataRowChangeEventArgs и DataColumnEventArgs).Если аргумент события был приведен к параметру EventArgs для параметра, как я могу определить исходный тип один раз в производном классе, т. Е. Как я могу узнать, был ли переданный параметр первоначально DataRowChangeEventArgs или DataColumnEventArgs?

1 Ответ

5 голосов
/ 01 июня 2011

Обычно вы должны вызывать функциональные возможности производного класса, используя виртуальные функции.Однако, если вам действительно нужно проверить тип, сделайте следующее:

DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg);
if (foo) {
    // is a DataRowChangeEventArgs
}

Конечно, вы также можете свернуть это в одну строку:

if (DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg)) {
    // is a DataRowChangeEventArgs
}

(Если выиспользуется C # вообще, dynamic_cast на указателе во многом похож на оператор as в C # --- он возвращает указатель на целевой тип, если это уместно, в противном случае ноль.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...