W Cat - Описание языка PascalABC.NET
- Название:Описание языка PascalABC.NET
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
W Cat - Описание языка PascalABC.NET краткое содержание
PascalABC.NET — это язык программирования Паскаль нового поколения, включающий классический Паскаль, большинство возможностей языка Delphi, а также ряд собственных расширений. Он реализован на платформе Microsoft.NET и содержит все современные языковые средства: классы, перегрузку операций, интерфейсы, обработку исключений, обобщенные классы и подпрограммы, сборку мусора, лямбда-выражения, средства параллельного программирования.
PascalABC.NET является мультипарадигменным языком: на нем можно программировать в структурном, объектно-ориентированном и функциональном стилях.
PascalABC.NET — это также простая и мощная интегрированная среда разработки, поддерживающая технологию IntelliSense, содержащая средства автоформатирования, встроенный отладчик и встроенный дизайнер форм.
Описание языка PascalABC.NET - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
...
procedureReadFile(fname: string);
begin
if notFileExists(fname) then
raise newFileNotFoundException('Файл не найден',fname);
end;
...
try
...
except
one: FileNotFoundException do
writeln('Файл '+e.fname+' не найден');
end;
Повторная генерация исключения
Для повторной генерации исключения в блоке exceptслужит оператор raiseбез параметров:
raise;
Например:
try
...
except
onFileNotFoundException do
begin
log.WriteLine('Файл не найден'); // запись в файл ошибок
raise;
end;
end;
Примеры обработки исключений
Пример 1.Обработка неверного ввода данных.
Рассмотрим программу.
vari: integer;
begin
readln(i);
writeln(i);
writeln('Выполнение программы продолжается');
end.
Если при вводе данных произойдет ошибка (например, мы введем не число), то программа завершится с ошибкой (ошибка ввода), и последующие операторы writeln не будут выполнены.
Перехватим исключение в блоке try:
vari: integer;
begin
try
readln(i);
writeln(i);
except
writeln('Ошибка ввода');
end;
writeln('Выполнение программы продолжается');
end.
На этот раз при возникновении ошибки ввода программа не будет завершена, а выполнение будет передано в блок except, после чего выполнение программы продолжится дальше. Таким образом, в последней программе не выполнится лишь оператор writeln(i).
Если в блоке tryмогут возникнуть различные исключения, то обычно используется вторая форма блока exceptс несколькими обработчиками исключений.
Пример 2.Обработка различных исключений.
vara,b: integer;
assign(f,'a.txt');
try
readln(a,b);
reset(f);
c:=a divb;
except
onSystem.DivideByZeroException do
writeln('Целочисленное деление на 0');
onSystem.IO.IOException do
writeln('Файл отсутствует');
end;
Часто необходимо совмещать обработку исключений и освобождение ресурсов независимо от того, произошло исключение или нет. В этом случае используются вложенные операторы try... exceptи try... finally.
Пример 3.Вложенные операторы try... exceptи try... finally.
assign(f,'a.txt');
try
reset(f);
try
try
c:=a divb;
except
onSystem.DivideByZeroException do
writeln('Целочисленное деление на 0');
end;
finally
close(f);
end;
except
onSystem.IO.IOException do
writeln('Файл отсутствует');
end;
Обратим внимание, что в данном примере исключение, связанное c целочисленным делением на 0, обрабатывается в самом внутреннем блоке try, а исключение, связанное с отсутствующим файлом - в самом внешнем. При этом, если файл был открыт, то независимо от возникновения исключения деления на 0 он будет закрыт.
Интерфейсы
Интерфейсы: обзор
Интерфейс - это тип данных, содержащий набор заголовков методов и свойств, предназначенных для реализации некоторым классом. Интерфейсы описываются в разделе typeследующим образом:
ИмяИнтерфейса = interface
объявления методов и свойств
end;
Для метода приводится только заголовок, для свойства после возвращаемого типа указываются необходимые модификаторы доступа read и write.
Например:
type
IShape = interface
procedureDraw;
propertyX: integer read;
propertyY: integer read;
end;
ICloneable = interface
functionClone: Object;
end;
Поля и статические методы не могут входить в интерфейс.
Класс реализует интерфейс, если он реализует все методы и свойства интерфейса в public-секции. Если класс не реализует хотя бы один метод или свойство интерфейса, возникает ошибка компиляции. Класс может реализовывать также несколько интерфейсов. Список реализуемых интерфейсов указывается в скобках после ключевого слова class(если указано имя предка, то после имени предка).
Например:
type
Point = class(IShape,ICloneable)
private
xx,yy: integer;
public
constructorCreate(x,y: integer);
begin
xx := x; yy := y;
end;
procedureDraw; begin end;
propertyX: integer readxx;
propertyY: integer readyy;
functionClone: Object;
begin
Result := new Point(xx,yy);
end;
procedurePrint;
begin
write(xx,' ',yy);
end;
end;
Интерфейсы можно наследовать друг от друга:
type
IPosition = interface
propertyX: integer read;
propertyY: integer read;
end;
IDrawable = interface
procedureDraw;
end;
IShape = interface(IPosition,IDrawable)
end;
Интерфейс по-существу представляет собой абстрактный класс без реализации входящих в него методов. Для интерфейсов, в частности, применимы все правила приведения типов объектов: тип объекта, реализующего интерфейс, может быть неявно приведен к типу интерфейса, а обратное преобразование производится только явно и может вызвать исключение при невозможности преобразования:
varip: IShape := new Point(20,30);
ip.Draw;
Point(ip).Print;
Все методы класса, реализующего интерфейс, являются виртуальными без использования ключевых слов virtualили override. В частности, ip.Draw вызовет метод Draw класса Point. Однако, цепочка виртуальности таких методов обрывается. Чтобы продолжить цепочку виртуальности методов, реализующих интерфейс, в подклассах, следует использовать ключевое слово virtual:
type
Point = class(IShape,ICloneable)
...
functionClone: Object; virtual;
begin
Result := new Point(xx,yy);
end;
end;
Для интерфейсов, как и для классов, можно также использовать операции isи as:
ifip isPoint then
...
varp: Point := ip asPoint;
ifp<>nil then
writeln('Преобразование успешно');
Реализация нескольких интерфейсов
Несколько интерфейсов могут содержать одинаковые методы или свойства. При наследовании от таких интерфейсов такие одинаковые методы или свойства сливаются в один:
type
IShape = interface
procedureDraw;
propertyX: integer read;
propertyY: integer read;
end;
IBrush = interface
procedureDraw;
propertySize: integer read;
Читать дальшеИнтервал:
Закладка: