问题标签 [runtime-type]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
2782 浏览

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

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

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

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

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

  • C#中的isandas关键字
  • 垂头丧气
  • 点网中的 Object.GetType 方法
  • typeidC++中的运算符

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

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

0 投票
2 回答
5347 浏览

c - 运行时确定 C 的类型

如果变量的类型必须在 C 中确定为运行时,但变量名称是固定的并给出的,有没有办法重用涉及变量的代码?

实际上,我是在询问运行时确定 C++ 类型的 C 对应情况。

如果可能,请举一些例子。

0 投票
2 回答
4797 浏览

c# - 获取对象实例上自定义属性的 *value*?

使用 .NET 4、C#

假设我有Info扩展的类CustomTypeDescriptor。一个类的实例Info有一个成对的字典<string, object>,在运行时加载。

我希望能够将字典键公开为属性(以便每个实例Info都有不同的属性)。属性的值应该是字典中的对应值。

我开始公开属性:

问题是,我如何获得他们的价值观?

我发现在prop.GetValue()被调用时获得控制的唯一方法是 override GetPropertyOwner(PropertyDescriptor pd),但我理解它的方式是,它希望我返回具有匹配的真实(编译)属性的另一种类型的实例。

我希望能够自己编写属性的实际实现(对于此示例,返回字典中键与属性名称匹配的值)。

这可能吗?

0 投票
5 回答
972 浏览

c - 在C中识别内存中值的数据类型?

程序/应用程序如何知道内存地址中的数据属于某种数据类型。

例如,假设存在int a;并且假设变量a存储在 address 中0x100。说它是 type 的存储信息在哪里int

0 投票
2 回答
632 浏览

hibernate - 子类化抽象超类/实体的实体的 JPA/hibernate 继承和运行时类型

我需要一些关于 JPA/Hibernate 继承的说明。

假设我有一个抽象Fruit实体,它由两个AppleOrange实体子类化。此外,我有一个Orangein 数据库实例。

我可以从数据库中检索此实例作为纯文本Fruit并将其转换为Orange吗?

0 投票
2 回答
1933 浏览

c# - Metro - 编写异步 c# 操作并从 javascript 调用

我创建了一个 Metro 应用程序,它由 - ac# windows 运行时组件 - 一个 javascript 应用程序组成,它包含 UI 并且是主应用程序。

在 c# 组件中,我创建了一个异步方法:

但是当我尝试从 javascript 代码中调用它时,我无法使用 .done() 或 then() 函数来处理方法 completed evet,因为出现错误:javascript error, cannot call done() from object not设置为对象的实例。

如果我尝试将 Task 或 Task 分配给该函数,我会遇到另一个错误,这告诉我 Task 不是 Windows 运行时类型,而是使用 IAsyncOperation、IAsyncAction、ecc..。

那么,如何在 c# windows 运行时组件中创建一个异步函数并从处理 done() 或 then() 事件的 javascript 中调用它

0 投票
1 回答
738 浏览

java - Java Dispatching-Runtime 类型

我对java中的方法调度感到困惑。为什么第一个方法“a.m1(b)”调用类A?

调用变量是 a。它的运行时类型是 B,不是吗?

0 投票
1 回答
1443 浏览

scala - 在 Scala 运行时检查参数类型(来自可变长度参数列表)

我正在为一个可以接受规则以应用于给定数据结构的系统设计接口。

主系统应该作为接收命令的驱动程序工作,例如“将规则 X 应用于参数 U、V、W,...”。我在编译时不知道所有可能的规则,所以我想将参数类型信息嵌入到规则定义中并稍后验证它。

现在规则定义如下:

中的实际参数的args数量必须与中定义的类型的数量相匹配argTypes,并且该方法apply应该返回一个操纵状态。(实际上,这是简化的解释,但这是一般的想法)。

我还实现了一个函数checkTypes,用于验证实际参数的类型是否与argTypes.

问题是,每当我尝试传递整数参数(从控制台或文本文件中读取)时,checkTypes程序都会失败并显示以下消息:java.lang.IllegalArgumentException: Incompatible argument type for [1]. Expected: int. Found: java.lang.Integer.

我正在转换整数参数,Integer.parseInt(t).asInstanceOf[Int]并且规则需要两个类型的参数Int

那么,有没有更有效的方法在运行时检查参数类型?

或者

我如何转换StringInt真实的?

提前致谢。


作为一个最小的工作示例,这是 Scala REPL 中引发异常的会话:

0 投票
2 回答
160 浏览

c++ - 使用运行时类型识别从 void 指针获取数据

我有一些类对应于一些应该对实际数据进行编码和解码的数据类型。例如, class MyInt32将具有对整数值进行编码并从编码字节流中对其进行解码的功能。所有这些类都派生自一个基类,MyTypes. 解码时,在从编码字符串中获取值后,我将值放入相应的数据类型中,例如int在 的情况下MyInt,并将数据作为void *.

在接收端,我对指针进行类型转换(int *),然后取消引用它以将其放入结果中。

但现在我也需要一种类型来拥有数组。在数组的情况下,我使用模板来说明数组要保存的内容。那是,

在解码函数中,我将调用类型 T 的解码。但现在它只返回一个void*. 我的数组不会知道解码后的类型是什么。所以我不能对它进行类型转换void *和取消引用来获取值。也就是说,如果我取一个数组MyInt

数组 ' data' 不会知道它的解码结果是vector<int>. 最好将数据传递为vector<int>而不是vector<int*> 如何实现它?

0 投票
5 回答
1066 浏览

c# - 哪个更有效:myType.GetType() 或 typeof(MyType)?

假设我有一堂课MyType

给定以下代码:

这些变量分配中哪一个是最有效的?

GetType() 或 typeof() 的性能是否足以使在静态字段中保存类型是有益的?