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

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

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

События.

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

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

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

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

1 лайк

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

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

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

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

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

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

А для чего?

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

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

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

1 лайк

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

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

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

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

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.
1 лайк