Реализация интерфейса IEquatable - PascalABC.NET
Формулировка задачи:
Ругается:
Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.TypeLoadException: Отсутствует реализация метода "Equals" в типе "Program146.TPoint" из сборки "Program146, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null".
в System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type)
в System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
в System.Reflection.Emit.TypeBuilder.CreateType()
в PascalABCCompiler.NETGenerator.ILConverter.CloseTypes()
в PascalABCCompiler.NETGenerator.ILConverter.ConvertFromTree(IProgramNode p, String TargetFileName, String SourceFileName, CompilerOptions options, String[] ResourceFiles)
в PascalABCCompiler.Compiler.Compile()'
Решение задачи: «Реализация интерфейса IEquatable»
textual
Листинг программы
type TPoint = Class <-- private _X, _Y: real; public property X: real read _X write _X; // X координата точки property Y: real read _Y write _Y; // Y координата точки constructor(cx, cy: real); begin X := cx;Y := cy; end; function DistanceTo(p: TPoint) := Sqrt(Sqr(p.X - X) + Sqr(p.Y - Y)); // Возвращает дистанцию от данной точки до точки p. function GetRadiusVectorLength() := Sqrt(Sqr(X) + Sqr(Y)); // Получает длину радиус вектора, задаваемого координатами данной точки. class function Readln() := new TPoint(ReadlnReal('X:'), ReadlnReal('Y:')); // Выполняет чтение точки с клавиатуры и возвращает новую точку. class function operator=(a, b: TPoint) := (a.X = b.X) and (a.Y = b.Y); class function operator<>(a, b: TPoint) := not (a = b); function ToString() := Format('Point({0}, {1})', X, Y); // Возвращает строковое представление объекта. procedure Print() := Write(ToString()); procedure Println() := Writeln(ToString()); function Equals(a: TPoint) := self = a; //<----- это оно. end;
Объяснение кода листинга программы
Список элементов кода:
- Объявление типа TPoint с приватными полями _X и _Y типа real.
- Реализация свойств X и Y типа real.
- Реализация конструктора TPoint с двумя аргументами типа real.
- Реализация функции DistanceTo для вычисления расстояния между двумя точками.
- Реализация функции GetRadiusVectorLength для вычисления длины радиус вектора заданной точки.
- Реализация функции Readln для чтения точки с клавиатуры и создания нового экземпляра TPoint.
- Реализация оператора присваивания для двух объектов TPoint.
- Реализация оператора < для двух объектов TPoint.
- Реализация функции ToString для получения строкового представления объекта TPoint.
- Реализация процедур Print и Println для вывода строкового представления объекта TPoint в консоль.
- Реализация функции Equals для проверки равенства двух объектов TPoint.