类型

用途

TYPE 语句是派生类型定义的第一个语句。

语法

读取语法图跳过可视语法图TYPE ::, type_attribute_list :: 类型名称 (type_param_name_list)
type_attribute
PRIVATEPUBLIC BIND(C) extends_specABSTRACT
type_name
是派生类型的名称
extends_spec (Fortran 2003)
读取语法图跳过可视语法图EXTENDS(parent_type_name )
type_param_name (Fortran 2003)
是类型参数的名称。 有关更多信息,请参阅 派生类型参数 (Fortran 2003)
读取语法图跳过可视语法图type_param_name,

规则

同一类型属性不能在同一 TYPE 语句上出现多次。

如果派生类型定义在模块的规范部分中,那么可以 指定 PRIVATEPUBLIC 属性。 派生类型定义可以是 PRIVATEPUBLIC,不能同时是两者。

如果将类型定义为 PRIVATE,那么只能在定义模块中访问以下内容:
  • 该派生类型的类型名称和任何 Fortran 2003 开始 类型参数名称 Fortran 2003 结束
  • 类型的结构构造函数。
  • 具有该类型的哑参数或函数结果的任何过程。

type_name 不得与任何内部类型的名称相同,但 BYTEDOUBLECOMPLEX除外。 type_name 也不得是任何其他可访问派生类型的名称。

BIND(C) 将 Fortran 派生类型显式定义为可与 C 类型互操作。 组件必须具有互操作类型。 (请参阅 类型的互操作性 以获取更多信息。) 具有 BIND 属性的派生类型不能是 SEQUENCE 类型。 具有 BIND 属性的派生类型的组件必须具有可互操作的类型和类型参数, 并且不能具有 POINTERALLOCATABLE 属性。 如果指定了 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

相关信息