DataRowChangeEventArgs

DataRowChangeEventArgs

我正在创建用于事件处理的继承模型(尤其是DataTablesXmlNode)。

我有一个名为EventManager的父类(super class),它具有以下虚函数:

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

以及派生类DataTableManagerXmlNodeManager
DataTable事件参数有所不同(例如DataRowChangeEventArgsDataColumnEventArgs)。如果将事件arg强制转换为参数的EventArgs,如何在派生类中一次确定原始类型,即如何知道所传递的参数最初是DataRowChangeEventArgs还是DataColumnEventArgs

最佳答案

通常,您应该使用虚函数调用派生类功能。但是,如果您确实必须测试类型,请执行以下操作:

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

当然,您也可以将其滚动到一行:
if (DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg)) {
    // is a DataRowChangeEventArgs
}

(如果您完全使用过C#,则指针上的dynamic_cast非常类似于C#中的as运算符-如果合适,它会返回指向目标类型的指针,否则返回null。)

08-06 14:50