问题标签 [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.
c# - 何时使用运行时类型信息?
如果我有一些东西的各种子类,以及对这些子类的实例进行操作的算法,并且如果算法的行为根据实例的特定子类而略有不同,那么最常用的面向对象的方法是使用虚方法。
例如,如果子类是 DOM 节点,并且如果算法要插入子节点,则该算法会根据父节点是 DOM 元素(可以有子节点)还是 DOM 文本(不能)而有所不同:和因此该insertChildren
方法在基类中可能是虚拟的(或抽象的) ,并且DomNode
在每个子类中实现不同。DomElement
DomText
另一种可能性是给实例一个公共属性,其值可以被读取:例如,算法可能会读取基类的nodeType
属性;DomNode
或者另一个例子,你可能有不同类型(子类)的网络数据包,它们共享一个公共数据包头,你可以读取数据包头来查看它是什么类型的数据包。
我没有太多使用运行时类型的信息,包括:
- C#中的
is
andas
关键字 - 垂头丧气
- 点网中的 Object.GetType 方法
typeid
C++中的运算符
当我添加一个取决于子类类型的新算法时,我倾向于在类层次结构中添加一个新的虚拟方法。
我的问题是,什么时候适合使用运行时类型的信息,而不是虚函数?
c# - 获取对象实例上自定义属性的 *value*?
使用 .NET 4、C#
假设我有Info
扩展的类CustomTypeDescriptor
。一个类的实例Info
有一个成对的字典<string, object>
,在运行时加载。
我希望能够将字典键公开为属性(以便每个实例Info
都有不同的属性)。属性的值应该是字典中的对应值。
我开始公开属性:
问题是,我如何获得他们的价值观?
我发现在prop.GetValue()
被调用时获得控制的唯一方法是 override GetPropertyOwner(PropertyDescriptor pd)
,但我理解它的方式是,它希望我返回具有匹配的真实(编译)属性的另一种类型的实例。
我希望能够自己编写属性的实际实现(对于此示例,返回字典中键与属性名称匹配的值)。
这可能吗?
c - 在C中识别内存中值的数据类型?
程序/应用程序如何知道内存地址中的数据属于某种数据类型。
例如,假设存在int a;
并且假设变量a
存储在 address 中0x100
。说它是 type 的存储信息在哪里int
?
hibernate - 子类化抽象超类/实体的实体的 JPA/hibernate 继承和运行时类型
我需要一些关于 JPA/Hibernate 继承的说明。
假设我有一个抽象Fruit
实体,它由两个Apple
和Orange
实体子类化。此外,我有一个Orange
in 数据库实例。
我可以从数据库中检索此实例作为纯文本Fruit
并将其转换为Orange
吗?
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 中调用它?
java - Java Dispatching-Runtime 类型
我对java中的方法调度感到困惑。为什么第一个方法“a.m1(b)”调用类A?
调用变量是 a。它的运行时类型是 B,不是吗?
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
那么,有没有更有效的方法在运行时检查参数类型?
或者
我如何转换String
为Int
真实的?
提前致谢。
作为一个最小的工作示例,这是 Scala REPL 中引发异常的会话:
c++ - 使用运行时类型识别从 void 指针获取数据
我有一些类对应于一些应该对实际数据进行编码和解码的数据类型。例如,
class MyInt32
将具有对整数值进行编码并从编码字节流中对其进行解码的功能。所有这些类都派生自一个基类,MyTypes
. 解码时,在从编码字符串中获取值后,我将值放入相应的数据类型中,例如int
在 的情况下MyInt
,并将数据作为void *
.
在接收端,我对指针进行类型转换(int *)
,然后取消引用它以将其放入结果中。
但现在我也需要一种类型来拥有数组。在数组的情况下,我使用模板来说明数组要保存的内容。那是,
在解码函数中,我将调用类型 T 的解码。但现在它只返回一个void*
. 我的数组不会知道解码后的类型是什么。所以我不能对它进行类型转换void *
和取消引用来获取值。也就是说,如果我取一个数组MyInt
数组 ' data
' 不会知道它的解码结果是vector<int>
. 最好将数据传递为vector<int>
而不是vector<int*>
如何实现它?
c# - 哪个更有效:myType.GetType() 或 typeof(MyType)?
假设我有一堂课MyType
:
给定以下代码:
这些变量分配中哪一个是最有效的?
GetType() 或 typeof() 的性能是否足以使在静态字段中保存类型是有益的?