dev*_*per 1 c++ datatable events inheritance
我正在为事件处理创建一个继承模型(特别是for DataTables
和XmlNode
).
我有一个EventManager
使用以下虚函数调用的超类:
DataChanged(EventArgs *arg)
DataChanging(EventArgs *arg)
DataInserted(EventArgs *arg)
DataInserting(EventArgs *arg)
DataRemoved(EventArgs *arg)
DataRemoving(EventArgs *arg)
Run Code Online (Sandbox Code Playgroud)
还有派生类DataTableManager
和XmlNodeManager
.
DataTable
事件参数各不相同(例如DataRowChangeEventArgs
和DataColumnEventArgs
).如果事件arg被转换EventArgs
为参数的一个,我怎样才能在派生类中确定原始类型一次,即如何知道传递的参数最初是a DataRowChangeEventArgs
还是a DataColumnEventArgs
?
通常,您应该使用虚函数调用派生类功能.但是,如果您真的必须测试类型,请执行以下操作:
DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg);
if (foo) {
// is a DataRowChangeEventArgs
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以将其转换为一行:
if (DataRowChangeEventArgs* foo = dynamic_cast<DataRowChangeEventArgs*>(arg)) {
// is a DataRowChangeEventArgs
}
Run Code Online (Sandbox Code Playgroud)
(如果你完全使用过C#,那么dynamic_cast
指针就像as
C#中的运算符一样- 如果合适,它会返回一个指向目标类型的指针,否则为null.)