我正在为事件处理创建一个继承模型(特别是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
运算符——它返回指向目标类型(如果适用),否则为空。)
关于c++ - 在 C++ 中确定数据表事件的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205908/