TURBO PASCAL |
Новости
|
Ссылки на описания модуляКак только вы включили модуль в свою программу, все констан- ты, типы данных, переменные, процедуры и функции, описанные в секции интерфейса этого модуля, становятся доступными для вашей программы. Например, допустим, имеется следующий модуль: unit MyStuff; interface const MyValue = 915; type MyStars = (Deneb,Antares,Betelgeuse); var MyWord : string[20]; procedure SetMyWord(Star : MyStars); function TheAnswer : integer; implementation . . . end. Как можно видеть здесь в интерфейсной части модуля, та часть модуля, которая находится в интерфейсной секции, является видимой для вашей программы (и может ею использоваться). С учетом этого можно написать следующую программу: program TestStuff; uses MyStuff; var I : integer; AStar : MyStars; begin Writeln(myValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := TheAnswer; Writeln(I) end. После включения в программу оператора uses MyStuff вы можете ссылаться на все идентификаторы, описанные в интерфейсной секции модуля МyStuff (МyWord, МyValue и так далее). Однако, рассмотрим следующую ситуацию: program TestStuff; uses MyStuff; const MyValue = 22; var I : integer; AStar : MyStars; function TheAnswer : integer; begin TheAnswer := 1 end; begin Writeln(myValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := TheAnswer; Writeln(I) end. В этой программе переопределяются некоторые из идентификато- ров, описанных в МyStuff. Будучи скомпилированной и выполненной, эта программа будет использовать собственные определения для МyValue и ТheAnswer, поскольку они были описаны позднее, чем оп- ределения в МyStuff. Вероятно, вам интересно знать, каким образом в такой ситуа- ции можно ссылаться на идентификаторы в МyStuff. Для этого необ- ходимо перед каждым идентификатором помещать имя МyStuff с точкой (.). Например, рассмотрим еще одну версию этой программы: program TestStuff; uses MyStuff; const MyValue = 22; var I : integer; AStar : MyStars; function TheAnswer : integer; begin TheAnswer := 1 end; begin Writeln(MyStuff.MyValue); AStar := Deneb; SetMyWord(AStar); Writeln(MyWord); I := MyStuff.TheAnswer Writeln(I) end. Эта третья программа даст такие же ответы, что и первая, да- же в том случае, если вы переопределите MyValue и TheAnswer. В действительности вы имели полное право написать первую программу следующим образом: program TestStuff; uses MyStuff; var I : integer; AStar : MyStuff.MyStars; begin Writeln(MyStuff.MyValue); AStar := My.Stuff.Deneb; MyStuff.SetMyWord(AStar); Writeln(My.Stuff.MyWord); I := MyStuff.TheAnswer; Writeln(I) end. Отметим, что имя модуля может предшествовать любому иденти- фикатору: константе, типу данных, переменной или подпрограмме. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |