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指针就像asC#中的运算符一样- 如果合适,它会返回一个指向目标类型的指针,否则为null.)