Автокласс не может иметь поля, являющиеся событиями


#1

Почему автокласс не может иметь события? В чём принципиальность их запрещать? Если это вызывает технические трудности (разрешение таких полей), то хотелось бы знать какие именно.


Ошибки компилятора PascalABC.Net
#2

Так поля делегатного типа или события?


#3

События.


#4

Всё, что нельзя присваивать, запрещено как поля.


#5

То есть, предлагалось присвоить полю событие???


#6

Меня смущает это ограничение потому, что в обычных классах поля-события разрешены. Есть какая-нибудь причина такого решения?


#7

что такое поля-события?


#8

В issue же написано. Это поля с типом делегата, перед которым поставили ключевое слово event. Основной их смысл в том, что им нельзя присваивать ничего, к ним применимы только операторы += и -= .

Я считаю, это фикс которым исправили ту issue - это костыль. Можно заменить := на += для полей - событий в конструкторах автоклассов. Это должно исправить ошибку и реализовать это не сложно, это лишь 1 if.


#9

<занудство>Это называется событием</занудство>


#10

Автоклассы - не для того чтобы использовать в них события. Мы всячески хотим это подчеркнуть. Обсуждать это бессмысленно - таково решение по языку.


#11

Ну я всё же не могу понять, зачем вы добавили фичу, а затем всячески усложняете её использование. При чём, даже в случаях, когда вам легко не делать такую бяку.


#12

Некоторые пользователи всё равно продолжают воспринимать желаемое за действительное даже после того как им объяснили. Автоклассы - не для того. Используйте обычные классы.


#13

А для чего?


#14

https://canvas.bookmate.com/quotes/C0igN9Uu?mode=facebook


#15

Вы могли бы говорить так, если бы объяснили. Но я пока только в разных темах несколько раз получил “они не для того”, но каждый раз вы уходите от ответа, когда спрашивают для чего.


#16

Это классы, содержащие только поля и простую инициализацию для них. Это аналог record-типов в будущем C#. Ну и в некоторых других языках типа Scala


#17

Я вообще, если честно, не совсем понимаю предназначение автоклассов. Сколько всего уже писал, а про автоклассы и не вспоминал даже.


#18

Мы их даже у школьников используем. Вместо записей. У них и ToString хороший автогенерируемый есть


#19

Ну у Вас в школе, конечно, даже магии научат. :smile:


#20

Вы меня расстрогали. Вот код оттуда:

uses GraphWPF;
type
  Точка = auto class
    x,y: real;
    procedure Нарисовать := FillCircle(x,y,0.2,Colors.Green);
  end;

begin
  SetMathematicCoords(-5,5);
  var p1 := new Точка(-1,2);
  var p2 := new Точка(2,-2);
  p1.Нарисовать;
  p2.Нарисовать;
end.