类型
用途
TYPE 语句是派生类型定义的第一个语句。
语法
- type_name
- 是派生类型的名称
- extends_spec (Fortran 2003)
- 是
- type_param_name (Fortran 2003)
- 是类型参数的名称。 有关更多信息,请参阅 派生类型参数 (Fortran 2003)。
规则
同一类型属性不能在同一 TYPE 语句上出现多次。
如果派生类型定义在模块的规范部分中,那么可以 仅 指定 PRIVATE 或 PUBLIC 属性。 派生类型定义可以是 PRIVATE 或 PUBLIC,不能同时是两者。
- 该派生类型的类型名称和任何
类型参数名称
。 - 类型的结构构造函数。
- 具有该类型的哑参数或函数结果的任何过程。
type_name 不得与任何内部类型的名称相同,但 BYTE 和 DOUBLECOMPLEX除外。 type_name 也不得是任何其他可访问派生类型的名称。
BIND(C) 将 Fortran 派生类型显式定义为可与 C 类型互操作。 组件必须具有互操作类型。 (请参阅 类型的互操作性 以获取更多信息。) 具有 BIND 属性的派生类型不能是 SEQUENCE 类型。 具有 BIND 属性的派生类型的组件必须具有可互操作的类型和类型参数, 并且不能具有 POINTER 或 ALLOCATABLE 属性。 如果指定了 EXTENDS ,那么该类型不得具有 BIND(C) 属性。
parent_type_name 必须是可访问的可扩展类型。 有关可扩展类型的更多信息,请参阅 可扩展派生类型 (Fortran 2003)。
只能为可扩展类型指定 ABSTRACT 属性。
如果指定了 EXTENDS ,那么无法针对该类型显示 SEQUENCE 。
如果指定了 EXTENDS ,并且要定义的类型具有 ISO_FORTRAN_ENV 内部模块中类型为 LOCK TYPE 的最终组件, 其父类型必须具有类型为 LOCK TYPE的最终组件。
如果指定了类型参数名称,则它们在此类型中必须是唯一的(包括任何祖先)。 每个名称都需要类型参数声明。 有关详细信息,请参阅 派生类型参数 (Fortran 2003)。
如果相应的 END TYPE 语句指定了名称,那么它必须与 type_name相同。
示例
MODULE ABC
TYPE, PRIVATE :: SYSTEM ! Derived type SYSTEM can only be accessed
SEQUENCE ! within module ABC
REAL :: PRIMARY
REAL :: SECONDARY
CHARACTER(20), DIMENSION(5) :: STAFF
END TYPE
END MODULE
TYPE MULTIDIM (K,NDIMS)
INTEGER, KIND :: K
INTEGER, LEN :: NDIMS
REAL(K) :: POS(NDIMS)
END TYPE MULTIDIM
TYPE, EXTENDS(MULTIDIM) :: NAMED_MULTI (L)
INTEGER, LEN :: L
CHARACTER(L) :: NAME
END TYPE NAMED_MULTI
