type
T0 = class
public
auto property X: integer;
end;
T1 = class
private
instance: T0;
public
property X: integer read instance.X write instance.X; // Program3.pas(11) : Ожидалось имя процедуры или функции
end;
begin
end.
Да, есть. Свойства старые и новые в смысле дизайна языка - чрезвычайно ломкая вещь. Поэтому расширять и без того уже слишком расширенный синтаксис - плохая затея
{$reference 'System.Windows.Forms.dll'}
{$reference 'System.Drawing.dll'}
uses
System, System.Windows.Forms, System.ComponentModel;
procedure SomeClosing(s: object; e: FormClosingEventArgs);
begin
writeln('выполнилось');
end;
begin
var MainForm := new Form;
MainForm.FormClosing += SomeClosing;
// Как мне тут удалить все делегаты из MainForm.Closing не используя имя SomeClosing. (т.е. так нельзя MainForm.Closing -= SomeClosing;)
// в C# это делается приравниванием к null
// MainForm.Closing := nil; но тут ошибка
Application.Run(MainForm);
end.
Это не очень хороший выход из ситуации (не зависимо от языка). Может, например, возникнуть потребность вернуть всё как было - до приравнивания к null. То есть, придётся каким-то образом добавлять всё обратно. Это - лишняя работа. Лучше хранить, например, в какой-то переменной типа bool флаг, указывающий используются ли делегаты из MainForm.Closing или нет. В виде кода:
/// <summary>
/// Какой-то класс.
/// </summary>
public class MyClass
{
/// <summary>
/// Событие.
/// </summary>
public event Action Event;
/// <summary>
/// Метод, вызывающий событие.
/// </summary>
public void Method()
{
// Какой-то код.
Event?.Invoke();
// Какой-то код.
}
}
internal class Program
{
private static bool flag;
private static void MethodA()
{
if (!flag)
return;
// Какой-то код.
}
private static void MethodB()
{
if (!flag)
return;
// Какой-то код.
}
private static void Main(string[] args)
{
MyClass x = new MyClass();
x.Event += MethodA;
x.Event += MethodB;
Flag = true;
x.Method(); // Действия из MethodA, MethodB - выполняются.
Flag = false;
x.Method(); // Никаких действий не произойдёт.
}
}
, либо:
internal class Program
{
private static bool flag;
private static void MethodA()
{
// Какой-то код.
}
private static void MethodB()
{
// Какой-то код.
}
public static void MainMethod()
{
if (!flag)
return;
MethodA();
MethodB();
}
private static void Main(string[] args)
{
MyClass x = new MyClass();
x.Event += MainMethod;
Flag = true;
x.Method();
Flag = false;
x.Method();
}
Но если окажется, что это действительно из-за меня (что вряд ли), то извините, пожалуйста, за неудобства(…
Ну не вряд ли… В следующий раз (чего я, конечно, постараюсь не допустить, буду всегда запускать тесты) можете скинуть скриншот с ошибкой TestRunner? Я бы просто поправил баг и всё. Это было бы гораздо быстрее.
Вот в чём была проблема: тип констант enum’а может быть не только int, из-за чего преобразование к int и ломалось.
@Admin, а быть может, всё-таки, реализуете это? Я бы и сам рад, только мне страшно туда лезть. Таблица символов, парсер, ну нафиг. Да я так и не понял, почему энумы вообще не сворачиваются, если в VisualPascalABCNET\IB\CodeCompletion\FoldingStrategy.cs идёт проход по всем классам, реализующим ITypeScope, а EnumScope реализует его наследника.
MrFresnel тогда напостил кучу issue-хотелок, которые вы закрыли, но среди них реально такая нужная вещь затерялась. Тому же SunSerega будет в разы удобнее работать над OpenCL, если он те свои огромные энумы сворачивать сможет))
/// Возвращает двумерный массив размера m x n, заполненный элементами x
function MatrFill<T>(m, n: integer; x: T): array [,] of T;
/// Возвращает двумерный массив размера m x n, заполненный элементами x
function MatrGen<T>(m, n: integer; gen: (integer,integer)->T): array [,] of T;
Описание MatrGen тупо скопипасчено с MatrFill. Но у MatrGen нет никакого x, поэтому это описание ему не подходит.
unit __RedirectIOMode;
//------------------------------------------------------------------------------
// Модуль подключаемый в режиме запуска со связью с оболочкой
// (с) DarkStar 2007
// Функции:
// 1. Посылка в поток ErrorStream сигнала [READLNSIGNAL]
// 2. Перехват исключений по AppDomain.CurrentDomain.UnhandledException и
// пердача их в поток ErrorStream // может быть "передача"?
// 3. Перехват исключений по Application.ThreadException и
// пердача их в поток ErrorStream // "передача" ?
//------------------------------------------------------------------------------