Chr*_*isW 5 c# c++ oop casting runtime-type
如果我有各种类的子类,以及对这些子类的实例进行操作的算法,并且如果算法的行为根据实例的特定子类略有不同,那么最常用的面向对象的方法是使用虚拟方法.
例如,如果子类是DOM节点,并且算法是要插入子节点,则该算法根据父节点是DOM元素(可以有子节点)还是DOM文本(不能)而不同:因此,该insertChildren
方法可以是DomNode
基类中的虚拟(或抽象),并且在每个子类DomElement
和DomText
子类中实现不同.
另一种可能性是为实例提供一个公共属性,可以读取其值:例如,算法可能会读取基类的nodeType
属性DomNode
; 或者另一个例子,您可能有不同类型(子类)的网络数据包,它们共享一个公共数据包标头,您可以读取数据包标头以查看它是什么类型的数据包.
我没有太多使用运行时类型信息,包括:
is
和as
关键字typeid
C++中的运算符当我添加一个取决于子类类型的新算法时,我倾向于在类层次结构中添加一个新的虚方法.
我的问题是,何时使用运行时类型信息而不是虚函数?
当没有别的办法时.虚拟方法总是首选,但有时它们无法使用.有几个原因导致这种情况发生,但最常见的原因是您没有要使用的类的源代码,或者您无法更改它们.当您使用旧系统或使用闭源商业库时,通常会发生这种情况.
在.NET中,你可能还需要动态加载新的程序集,比如插件,你通常没有基类,但必须使用像duck typing这样的东西.
归档时间: |
|
查看次数: |
2621 次 |
最近记录: |