gpt4 book ai didi

c# - 何时使用运行时类型信息?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:13:19 24 4
gpt4 key购买 nike

如果我有一些东西的各种子类,以及一个对这些子类的实例进行操作的算法,并且如果算法的行为根据实例的特定子类而略有不同,那么最常见的面向对象的方法这是使用虚拟方法。

例如,如果子类是 DOM 节点,如果算法是插入一个子节点,则该算法会有所不同,具体取决于父节点是 DOM 元素(可以有子节点)还是 DOM 文本(不能有子节点) ): 因此 insertChildren 方法在 DomNode 基类中可能是虚拟的(或抽象的),并且在每个 DomElementDomText 子类。

另一种可能性是为实例提供一个公共(public)属性,其值可以被读取:例如,算法可能读取 DomNode 基类的 nodeType 属性;或者再举一个例子,你可能有不同类型(子类)的网络数据包,它们共享一个公共(public)的数据包头,你可以通过读取数据包头来查看它是什么类型的数据包。

我没有太多使用运行时类型的信息,包括:

  • C#中的isas关键字
  • 沮丧
  • .net中的Object.GetType方法
  • C++中的typeid运算符

当我添加一个依赖于子类类型的新算法时,我倾向于向类层次结构中添加一个新的虚方法。

我的问题是,什么时候使用运行时类型的信息而不是虚函数是合适的?

最佳答案

当别无他法时。虚拟方法总是首选,但有时它们就是不能使用。发生这种情况的原因有很多,但最常见的原因是您没有要使用的类的源代码,或者您无法更改它们。当您使用遗留系统或闭源商业库时,经常会发生这种情况。

在 .NET 中,您可能还必须动态加载新程序集,例如插件,并且您通常没有基类,但必须使用鸭子类型之类的东西。

关于c# - 何时使用运行时类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1520466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com