создание своего exception

myexception
Дата: 12.11.2007 11:36:02
Ребят, очень нужно. Как на Delphi создать собственное исключение. Дело в том что на Java только программил. Так вот там это делается вот так:
public class MyException extends Exception {
     public MyException() {};
     public MyException(String msg) {
           super(msg);
     };
}

Фактически единственное, что добавляет этот код к стандартным возможностям - это новое имя исключения (MyException). Но, обычно, этого достаточно.

То есть класс MyException наследует класс Exception просто. Как в Delphi сделать это.
Альт
Дата: 12.11.2007 11:40:12
где-то в общем модуле... в интерфейсной части:

type
  TMyException = class( Exception )
  end;

а уже в коде создаем исключения по мере необходимости
 
 Raise TMyException.Create( 'Error' );
softwarer
Дата: 12.11.2007 13:32:13
myexception
То есть класс MyException наследует класс Exception просто. Как в Delphi сделать это.

Еще проще - поскольку отсутствует необходимость повторения конструктора. Просто

type
  EMyException = class (Exception);

После этого доступен весь набор конструкторов Exception, наиболее используемые - Create и CreateFmt.
Myexception
Дата: 12.11.2007 14:18:34
То есть создал я свой обработчик MyException. А теперь, допупустим у могу ли я при обработке исключения например EConvertError вызывать в его уже обработчике то есть писать raise Raise TMyException.Create( 'Error' );
1)как это выглядеть будет ?
2) а как обратиться в коду ошибки и тексту сообщения - то есть вызвать свойства суперкласса(предка) ?
Warstone
Дата: 12.11.2007 14:33:08
Если свойства/методы предка публичны и вы их не переписывали (а вы, скорей всего, этого не делали), то эти свойства и методы доступны по умолчанию. То есть:
type
TObject1=class(TObject)
public
MyProperty:Integer;
procedure MyMethod;
procedure MyMethod2; virtual;
procedure MyMethod3; virtual; abstract;
end;

TObject2=class(TObject)
public
procedure MyMethod2; override;
procedure MyMethod3; override;
end;
В таком случае вызовы:
Object1.MyMethod; // Верно.
Object1.MyMethod2; // Верно. Но этот метод можно переписать в последующем объекте.
Object1.MyMethod3; // Неверно. В текущем объекте нет реализации. Об этом говорит abstract;

Object2.MyMethod; //Верно, вызовется Object1.MyMethod
Object2.MyMethod2; //Верно, вызовется Object2.MyMethod2
Object2.MyMethod3; //Верно, вызовется Object2.MyMethod3

Ну и описания самих процедур:
Procedure TObject1.MyMethod2;
begin
//Должен быть
end;

Procedure TObject2.MyMethod2;
begin
inherited; // Вызов Метода родителя, то есть будет вызван Object1.MyMethod2
end;

Procedure TObject2.MyMethod3;
begin
// inherited пользовать нельзя, так как нет кода в родителе.
end;

Соотв. все это распространяется и на 3-х и более кратную наседовательность... То есть:
type
TObject3=class(TObject2)
....
Object3.MyMethod; // Вызов TObject1.MyMethod

Надеюсь этого достаточно?
Ega
Дата: 12.11.2007 14:35:34
Myexception
То есть создал я свой обработчик MyException. А теперь, допупустим у могу ли я при обработке исключения например EConvertError вызывать в его уже обработчике то есть писать raise Raise TMyException.Create( 'Error' );
1)как это выглядеть будет ?
2) а как обратиться в коду ошибки и тексту сообщения - то есть вызвать свойства суперкласса(предка) ?


try
  ....
except on E : EConvertError do
  raise TMyException.Create( 'EConvertError : ' + E.Message );
end;