Единицы в Delphi такие же, как классы в других языках?
Мне нужно написать код на Delphi, но у меня нет опыта работы с Delphi. Я видел людей, пишущих какой-то код, известный как unit1
или же unit2
и импортировать его, используя код внутри них. Итак, я могу увидеть блок как класс в Java или C#?
3 ответа
Нет. Единица - это файл исходного кода в Delphi. По сути, вы можете думать об этом как о пространстве имен, область действия которого точно такая же, как у текущего файла.
Внутри модуля вы можете определять классы с синтаксисом определения типа. Это выглядит так:
type
TMyClass = class(TParentClass)
private
//private members go here
protected
//protected members go here
public
//public members go here
end;
Любые методы объявляются ниже объявления типа, а не встроенного, что облегчает чтение кода, потому что вы можете сразу увидеть состав класса вместо того, чтобы разбираться с его реализацией.
Кроме того, каждый модуль имеет два основных раздела, называемых интерфейсом и реализацией. Объявление типа может быть размещено в любом разделе, но код реализации недопустим в интерфейсе. Это учитывает концепцию языка, аналогичную общедоступным и закрытым классам Java или C#: любой тип, объявленный в интерфейсе, виден другим модулям, которые используют этот модуль ("public"), в то время как любой тип, объявленный в реализации, виден только внутри одного и того же модуля.
Чтобы добавить к ответу Мейсона - общая структура юнитов выглядит примерно так:
Unit UnitName;
interface
//forward declaration of classes, methods, and variables)
uses
//list of imported dependencies needed to satisfy interface declarations
Windows, Messages, Classes;
const
// global constants
THE_NUMBER_THREE = 3;
type // declaration and definition of classes, type aliases, etc
IDoSomething = Interface(IInterface)
function GetIsFoo : Boolean;
property isFoo : Boolean read GetIsFoo;
end;
TMyArray = Array [1..5] of double;
TMyClass = Class(TObject)
//class definition
procedure DoThis(args : someType);
end;
TAnotherClass = Class(TSomethingElse)
//class definition
end;
//(global methods)
function DoSomething(arg : Type) : returnType;
var //global variables
someGlobal : boolean;
implementation
uses
//list of imported dependencies needed to satisfy implementation
const
//global constants with unit scope (visible to units importing this one)
type
//same as above, only visible within this or importing units
var
//global variables with unit scope (visible to units importing this one)
procedure UnitProc(args:someType)
begin
//global method with unit scope, visible within this or importing units
//note no forward declaration!
end;
procedure TMyClass.DoThis(args : someType)
begin
//implement interface declarations
end;
function DoSomething(arg : Type) : returnType;
begin
// do something
end;
initialization
//global code - runs at application start
finalization
//global code - runs at application end
end. // end of unit
Очевидно, что каждому блоку не нужны все эти разделы, но я думаю, что это все возможные разделы, которые могут быть включены. Мне потребовалось некоторое время, чтобы понять все это, когда я впервые зашел в Delphi, и я, вероятно, преуспел бы с такой картой, поэтому я предоставляю ее на случай, если она будет полезна.
Внутри модуля Delphi или библиотеки C++ Builder вы можете создавать более одного класса одновременно. В средах разработки для JAVA часто используется один класс для одного файла, он отличается от Delphi или C++ Builder, но вы можете сделать это также для Delphi или C++ Builder.
Занятия на каждом языке имеют свои особенности. Можно думать в ПОО для всех одинаково, но реализовать это отличается.