Чтобы получить доступ к ss1
, вам нужен указатель внутри вашего абстрактного класса на дочерний объект. Указатель может иметь любое расширение типа, которое вы хотите определить. Поскольку у вашего связанного списка есть два разных расширения типа, вы должны объявить два дочерних указателя в вашем абстрактном классе.
module class_type
implicit none
class(*), pointer :: fnzo => null()
type, abstract :: gen
real :: ss
integer :: sdsd
class(gen), pointer :: next =>null()
type(final1), pointer :: child
end type
type, extends(gen) :: final1
real :: ss1
end type final1
type, extends(gen) :: final2
real :: x1(10)
end type final2
end module class_type
program test_class
use class_type
implicit none
class(gen), pointer :: test
type(final1), target :: test1
allocate(test, source=test1)
test1% ss1 = 20.0
test% child => test1
write(*,*) test1% ss1
write(*,*) test% child% ss1
end program test_class
Когда вы скомпилируете и выполните, вы увидите:
20.00000
20.00000
Команда go
используется для разделения кода на отдельные пакеты. Если это именно то, что вы хотите сделать, то вам следует использовать его, но это означает, что пакеты фактически разделены, и вы не можете совместно использовать переменные между ними.
В вашем случае решение простое; вы можете просто удалить операторы go
, они не нужны в этом коде.
Боковое примечание: вы не можете использовать переменную в операторе use
, она должна быть имя базы данных.
Можно использовать NOEXEC, следуют, он ступает ниже:
таблица
#temp_procedure_version(procedure_version varchar(5),pointer varchar(20))
Create вставляет версии процедуры и указатель на версию во временную таблицу #temp_procedure_version
- пример procedure_version указатель
вставляет в temp_procedure_version
, значения (1.0, 'первая версия')
вставляют в temp_procedure_version
, значения (2.0, 'окончательная версия')
тогда получают версию процедуры, можно использовать, где условие как в следующем утверждении
Выбор @ProcedureVersion=ProcedureVersion
от #temp_procedure_version
, где pointer='first version'
IF (@ProcedureVersion='1.0')
BEGIN
SET NOEXEC OFF --code execution on
END
ELSE
BEGIN
SET NOEXEC ON --code execution off
END
- вставляют версию 1.0 процедуры здесь
, Создает версию 1.0 процедуры как.....
SET NOEXEC OFF -- execution is ON
Выбор @ProcedureVersion=ProcedureVersion
от [1 112], где указатель ='final версия'
IF (@ProcedureVersion='2.0')
BEGIN
SET NOEXEC OFF --code execution on
END
ELSE
BEGIN
SET NOEXEC ON --code execution off
END
Создают версию 2.0 процедуры как.....
SET NOEXEC OFF -- execution is ON
- отбрасывают временную таблицу #temp_procedure_version
Drop таблицы
Не уверен, поможет ли это
declare @s varchar(50)
set @s='Northwind'
declare @t nvarchar(100)
set @t = 'select * from ' + @s + '.[dbo].[Customers]'
execute sp_executesql @t
Используйте временную таблицу:
CREATE TABLE #variables
(
VarName VARCHAR(20) PRIMARY KEY,
Value VARCHAR(255)
)
GO
Insert into #variables Select 'Bob', 'SweetDB'
GO
Select Value From #variables Where VarName = 'Bob'
GO
DROP TABLE #variables
go