Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Одноименные методы




В Delphi 4,5 появилась возможность в рамках одного класса иметь несколько одноименных методов. Механизм перекрытия родительского метода одноименным методом потомка приводит к тому, что потомок «не видит» перекрытый родительский метод и может обращаться к нему лишь с помощью зарезервированного слова Inherited. В Delphi 4 введено зарезервированное слово overload (перезагрузить), с помощью которого становятся видны одноименные методы как родителя, так и потомка. Чтобы одноименные методы можно было отличить друг от друга, каждый из них должен иметь уникальный набор параметров. При обнаружении одноименного метода компилятор предупреждает о том, что у класса уже есть аналогичный метод с другими параметрами. Для подавления сообщений объявление одноименного метода можно сопровождать зарезервированным словом reintroduce (вновь ввести).

Пример: В классе Tform1 используется 4 одноименных метода Close. Лишь один из них – унаследованный метод без параметра выполняет свои основные функции – закрывает окно. Три других отличаются набором параметров и выводят сообщения в заголовок окна.

Procedure TForm1.Button1Click(Senter:TObject);

Begin

Close(‘Строка символов’);

End;

Procedure TForm1.Button2Click(Senter:TObject);

Begin

Close(123);

End;

Procedure TForm1.Button3Click(Senter:TObject);

Begin

Close(20,300);

End;

Procedure TForm1.Button4Click(Senter:TObject);

Begin

Close;

End;

В разделе private класса Tform1 вставить 3 объявления методов Close

Private

Procedure Close(S:string); reintroduce; overload;

Procedure Close(I:integer); reintroduce; overload;

Procedure Close(I,J:integer); reintroduce; overload;

Implementation

Procedure Tform1.Close(S:String);

Begin

Caption:=S;

End;

Procedure Tform1.Close(I:Integer);

Begin

Caption:=IntToStr(I);

End;

Procedure Tform1.Close(I,J:Integer);

Begin

Caption:=IntToStr(I*J);

End;

3. Свойства. Свойства – это специальный механизм классов, регулирующий доступ к полям. Свойства объявляются с помощью зарезервированных слов property, read и write (слова read и write считаются зарезервированными только в контексте объявления свойства). Обычно свойство связано с некоторым полем и указывает те методы класса, которые должны использоваться при записи в это поле или при чтении из него.

Type

TClass=class

IntField:integer;

Function GetField:Integer;

Procedure setField(value:Integer);

Property IntegerValue:Integer read GetField write SetField;

 

В контексте программы свойство ведет себя как обычное поле.

Var

aClass:TClass;

value:Integer;

begin

aClass:=TClass.Create; {Обязательно! Перед обращением к полю или свойству!}

aClass.IntegerValue:=0;

Value:=aClass.IntegerValue;

End;

Разница между оператором

aClass.IntField:=NewValue;

и оператором

aClass.IntegerValue:=NewValue;

заключается в том, что при обращении к свойству автоматически подключается метод SetField, в котором могут реализовываться специальные действия.

Если необходимо, чтобы поле было доступно только для чтения или только для записи, следует опустить часть write или read. Вообще говоря, свойство сожжет и не связываться с полем. Фактически оно описывает один или два метода, которые осуществляют некоторые действия над данными того же типа, что и свойство.

 

ОБЪЯВЛЕНИЕ КЛАССА

 

Любой вновь создаваемый класс может содержать секции (разделы), определяемые зарезервированными словами

· published (декларированные),

· private (личные),

· protected (защищенные),

· public (доступные),

· automated (автоматизированные).

Внутри каждой секции вначале определяются поля, а затем – методы и свойства.

Секции определяют область видимости элементов описания класса. Секция public не накладывает ограничений на область видимости перечисляемых в ней полей, методов и свойств – их можно вызывать в любом другом модуле программы. Секция published также не ограничивает область видимости, однако в ней перечисляются свойства, которые должны быть доступны не только на этапе исполнения, но и на этапе конструирования объектов. Секция published используется только при разработке нестандартных компонентов. Среда Delphi помещает описания компонентов, вставленных в форму, в специальную секцию без названия, которая располагается сразу за заголовком класса и продолжается до первой объявленной секции. Это секция published. Программисту не следует помещать в нее собственные элементы описания класса или удалять из нее элементы, вставленные средой. Секция private сужает область видимости до минимума: личные элементы описания доступны только внутри методов данного класса и в подпрограммах, находящихся в том же модуле, где описан класс. Элемент, объявленный в секции private, становится недоступным даже ближайшим потомкам класса, если они размещаются в других модулях. Секция protected доступна только методам самого класса, а также любым его потомкам независимо от того, находятся ли они в том же модуле или нет. Секция automated используется только для объявления свойств и методов, которые будут добавлены к так называемому интерфейсу OLE-объектов автоматизации; область видимости членов этой секции не ограничена.

В Object Pascal разрешается сколько угодно раз объявлять любую секцию, причем порядок следования секций не имеет значения. Любая секция может быть пустой.

При объявлении класса-потомка разрешается перемещать элементы класса из одной области видимости в другую. После перемещения в секцию private элемент объявления становится невидимым потомкам (если потомок, как это обычно бывает, объявляется в другом модуле) и, следовательно, его уже нельзя переместить в другую секцию.

Класс может объявляться только в интерфейсной области модуля или в самом начале области реализации. Нельзя объявлять классы в разделе описания подпрограмм.

 




Поделиться с друзьями:


Дата добавления: 2015-05-10; Просмотров: 453; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.