我有以下代码:
Module Hello
Implicit None
Type, Public :: TestOne
Private
Integer :: One, Two, Three
contains
Procedure, Pass, Public :: Set => SetSub
End type TestOne
Private :: SetSub
Interface Assignment(=)
Module Procedure SubgetValue
End Interface Assignment(=)
contains
Subroutine SetSub(this)
Implicit none
Class(TestOne), Intent(InOut) :: this
this%one=1
this%two=2
this%three=3
End Subroutine SetSub
Subroutine SubGetValue(ISOut,TSIn)
Implicit None
Integer, Intent(Out) :: ISOut
Class(TestOne), Intent(In) :: TSIn
ISOut=TSIn%one
End Subroutine SubGetValue
End Module Hello
Program Test
use Hello
Implicit None
Type(TestOne) :: TSTest
Integer :: b
call TSTest%Set()
b=TSTest
write(*,*) b
End Program Test
在这个版本中,我只能通过“=”访问“TSTest%One”。问题是如何创建接口分配,以便我可以访问“TSTest%one”、“TSTest%two”或“TSTest%three”。如果“一”、“二”和“三”不是私有的,那将是微不足道的。但是,目标是保持它们的私密性并通过接口分配访问它们。任何用于访问“二”或“三”的附加模块过程都将具有相同的虚拟参数,从而导致编译时错误。
但是,解决该问题的另一种方法是“setter”/“getter”例程,但我在网上某处读到通过赋值访问 varialbe 比通过“getter”例程快得多。
有什么建议么。
谢谢