问题标签 [derived-types]

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 投票
3 回答
205 浏览

c# - 如何将父类引用的子类更改为子类的引用类型?

我有 20 个左右的事件类都继承自 EventDto。这些子类都被序列化/反序列化(使用 DataContractJsonSerializer,每个子类都被添加为 [KnownType(typeof(subclasstype))] 属性),反序列化方法如下所示:

反序列化一个事件后,我需要根据它的类型来处理它。所以我有:

问题是ProcessMessage()中的eventDto有一个EventDto的引用类型,所以调用的Process()方法总是一样的。我需要能够区分 EventDto 的不同子类并调用适当的方法。

有什么方法可以将 ProcessMessage() 中的 eventDto 类型从 EventDto 更改为其实际派生类型(例如 EventDtoSubclass2)?

0 投票
2 回答
842 浏览

multidimensional-array - 在 Fortran 90 中使用二维数组与派生类型数组

假设您想要一个数组列表,每个数组都具有相同的大小。使用 2D 数组在性能方面是否更好:

或派生类型的数组:

当然,对于不同大小的数组,我们别无选择。但是这两种情况之间的内存是如何管理的呢?另外,其中之一是良好的代码实践吗?

0 投票
1 回答
1719 浏览

interface - 派生数据类型中的 Fortran 赋值运算符接口

我有以下代码:

在这个版本中,我只能通过“=”访问“TSTest%One”。问题是如何创建接口分配,以便我可以访问“TSTest%one”、“TSTest%two”或“TSTest%three”。如果“一”、“二”和“三”不是私有的,那将是微不足道的。但是,目标是保持它们的私密性并通过接口分配访问它们。任何用于访问“二”或“三”的附加模块过程都将具有相同的虚拟参数,从而导致编译时错误。

但是,解决该问题的另一种方法是“setter”/“getter”例程,但我在网上某处读到通过赋值访问 varialbe 比通过“getter”例程快得多。

有什么建议么。

谢谢

0 投票
4 回答
3053 浏览

fortran - 作为派生数据类型的组件的命名常量

似乎 Fortran 90 不允许在派生数据类型中使用命名常量。这是真的?以下代码不起作用。

编译器说派生类型定义中不允许使用参数语句。

当我删除parameter关键字时,一切正常。但是,我怎样才能确保组件a没有在其他地方修改呢?

0 投票
1 回答
5030 浏览

c# - SignalR 2.0 更改 Json Serializer 以支持派生类型对象

请注意,我在这里明确引用了 SignalR 2.0 ......我已经看到了 SignalR 1.1/1.2 的一些(讨厌的)方法......但 2.0 还没有。

有没有人成功更改 SignalR 2.0 默认 json 序列化程序以启用派生类型的发送?根据我对 SignalR 2.0 的了解,这应该是可能的,但是,我没有任何运气,也没有在任何地方找到完整的示例。

这是我开始的方式……任何帮助将不胜感激。

我的启动.cs

集线器上的方法

我的控制台测试应用程序(这发布到集线器)

只是为了衡量 Stock.cs

我的第一个倾向是我忽略了在客户端设置序列化程序。所以我在创建连接之后但在创建集线器代理之前添加了以下内容:

然而,这只是在 myDataHub.Invoke(..) 调用期间导致了 InvalidOperationException(无法发送数据,因为连接处于断开状态。在发送任何数据之前调用 start。)。

0 投票
1 回答
183 浏览

fortran - 派生数据类型中的 Fortran、参数和静态表

我想创建一个派生数据类型,其中包含一个表和该表的长度。理想情况下,我想声明如下

但是一开始 ndata 是未知的,因此 x 是一个动态表。

allocatable当 ndata 已知时,我是否必须使用x 并分配它?

处理此类案件的最佳方法是什么?

0 投票
1 回答
884 浏览

fortran90 - Fortran 90,如何在子例程中使用派生类型中定义的数组

我定义了一个派生类型如下:

在主代码中,我定义了一个数组并将其输入到子程序中

在子程序中,

size(cl_mean) 的输出是正确的。但是 size(cl_mean(1)%omx) 的输出是 1。这意味着编译器认为 cl_mean(1)%omx 是一个变量而不是一个数组。

如何访问数组?谢谢你。

0 投票
1 回答
1524 浏览

c - 在 Fortran 派生类型中保存指向 C 函数的指针

我有一个从 C 程序调用的 Fortran DLL,我的一个程序需要定期调用由 C 程序提供的回调函数。我目前让它以其“简单”形式运行良好,但我希望能够将我的回调指针存储在派生类型中,以便可以更轻松地在我的 Fortran 代码中传递它。到目前为止,我尝试过的任何方法似乎都不起作用。

首先,这是我目前所拥有的,这确实有效:

从 C(OK,实际上是 C++)程序开始,回调的标头原型是:

Fortran 调用的原型是:

实际的回调函数是:

从 C++ 对 Fortran 代码的调用是:

其中m_image是一个图像数据数组,它是当前对象的成员属性。发生的情况是 C++ 将原始图像数据传递给 Fortran DLL 并要求 Fortran 处理它,由于这需要很长时间,Fortran 会定期更新图像缓冲区并调用回调来刷新 GUI。无论如何,转到 Fortran 方面,我们为 C 回调定义了一个接口:

并定义我们的主要 Fortran 例程:

在主程序的某个地方,我们称之为子程序foo

...其中foo定义为:

正如我所说,所有这一切都运作良好,并且已经这样做了很长时间。

现在对于我尝试过但不起作用的事情:

天真的方法,只是将参数复制到结构的字段中

我希望这能奏效,因为我所做的只是将原始元素复制到没有修改的结构中。C 端没有任何变化,Fortran 主函数的定义和c_callback. 我所做的只是创建一个新的 Fortran 派生类型:

然后在我的主函数中,我用从 C 应用程序接收到的值填充它:

子例程 foo 稍作修改,现在它在结构中查找回调和 C 对象:

这在调用“访问冲突读取位置 0xffffffffffffffff”时失败。

使用更多 iso_c_binding 功能的复杂方法

C 端也没有任何变化,但我修改了主函数的 Fortran 端以接收回调c_funptr

我像以前一样定义了抽象接口subroutine c_callback,尽管我已经尝试了保留bind(c)它的一部分并省略它。调用子例程的主函数中的代码foo现在是:

...子例程 foo 本身仍然像前面的例子一样定义。

不幸的是,这与前面的示例完全相同。

我假设有一个正确的语法来实现我在这里想要实现的目标,我将非常感谢任何建议。

0 投票
3 回答
1746 浏览

c# - 如何在 C# 中使用派生返回类型覆盖方法?

我想用派生类类型覆盖虚拟方法。目前最好的方法是什么?到目前为止,我找到了两种方法:

  1. 为每个派生类型使用一个abstractclass;桥梁与protected方法。
  2. 使用protected带有public访问器的实现。

基本情况(未实施解决方案,Clone始终返回基本类型A1):

解决方案#1(使用带有桥abstract的每个派生类型的基类):protected

解决方案#2(使用protected带有public访问器的实现):

据我所知,解决方案 #1 是最严格的方法,但它需要为每个想要替换 baseabstract的返回类型的class派生的 base 。classclass

解决方案#2 更简单、更容易理解,但它在内部类型安全方面有一个小的突破。具体来说,每个派生类型的public访问器都相信其protected方法将返回正确的类型。所以有可能有一个内部类型的断开,例如:

是否有使用派生类型覆盖方法的正确(普遍接受的)最佳实践?

0 投票
1 回答
1730 浏览

fortran - 确定内存中的 Fortran 派生类型大小

Fortran 内部函数transfer可用于将派生类型转换为实数或整数数组。在依赖原始类型(整数、实数等)数组进行持久性的遗留系统中工作时,这可能非常有用。

下面的代码至少运行ifort并将gfortran一个简单的派生类型示例转换为整数数组(使用解决方案更新):

在我的 PC 上,这是输出(此结果至少取决于平台):

我的问题是我已经“猜到”了一个 30 元素的长整数数组足够大来存储这个数据结构。有没有办法确定数组需要多大才能存储整个数据结构?