我正在创建用于事件处理的继承模型(尤其是DataTables
和XmlNode
)。
我有一个名为EventManager
的父类(super class),它具有以下虚函数:
DataChanged(EventArgs *arg)
DataChanging(EventArgs *arg)
DataInserted(EventArgs *arg)
DataInserting(EventArgs *arg)
DataRemoved(EventArgs *arg)
DataRemoving(EventArgs *arg)
以及派生类
DataTableManager
和XmlNodeManager
。DataTable
事件参数有所不同(例如DataRowChangeEventArgs
和DataColumnEventArgs
)。如果将事件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。)