В Finalize
Да, нормальное. Свойство меняется только целиком. А часть свойства - меняется какая-то копия. В Delphi такое же поведение. Посмотрите, как в C#
Надо привести к типу I1 - это явная реализация интерфейса. Почитайте о ней в интернете
Это не решает проблему с System.Collections.Generic.IEnumerable<T>.GetEnumerator
, потому что System.Collections.Generic.IEnumerable<T>
это наследник System.Collections.IEnumerable
. Я пробовал приводить к System.Collections.Generic.IEnumerable<T>
, не помогает. Всё равно вызывается System.Collections.IEnumerable.GetEnumerator
…
Ну Вы проверяйте всё в C#. Там правда всё тоже очень путано. И вообще - я не рекомендую Вас лезть в явную реализацию интерфейса IEnumerable. Для этого у нас есть yield. Для интереса посмотрите, какой код генерируется за кадром. Ну и собственно так и можете писать.
yield
это не совсем то, мне нужен был контейнер - список, а не перечисление. А что касается перечислителя - это чтоб foreach
работал. Ну, msdn предлагает что на C# создать свой класс-перечислитель, вместо того чтоб красть у приватной переменной - списка. Громоздко, ну ладно, хотя бы работает. А в yield
решение уникально своей кривостью и работоспособностью: там класс, создаваемый yield
, является сразу и последовательностью, и её же перечислителем.
На MSDN к сожалению многие коды - старые - когда не было еще yield. Вообще без yield это затея - безумная. У них вначале был интерфейс IEnumerable, потом появился IEnumerable, они его унаследовали от IEnumerable и сильно всё запутали
Почему это компилируется, если не должно:
type
I1 = interface
end;
begin
(I1(System.Math.Sin));
end.
?
-> github, New Issue
Желательно всё же весь код в ` засовывать, у вас вон <T>
по съедало…
Да, кстати, почему для:
begin
var S := Arr(1, 2, 3).Select(x -> new System.Nullable<integer>(x));
end.
Intellisence показывает вместо:
function Select<integer, System.Nullable<integer>>(selector: integer -> System.Nullable<integer>): sequence of System.Nullable<integer>
показывает вот это:
?
Ошибка времени выполнения: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку “ClassLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null” либо одну из их зависимостей. Не удается найти указанный файл. Стек: в CallCS.Program.$Main() в CallCS.Program.Main()
Это при подключении к файлу CallCS.pas библиотеки скомпилированной в C#. Файл CallCS.pas с библиотекой ClassLibrary1.dll из примеров обучения в папке …PABCWork.NET\Samples!MainFeatures\04_Units\CallC#
Ну не знаю. Всё работает
Совершенно ничего не меняю в этих двух файлах, запускаю файл CallCS.pas (“выполнить” в PascalABC.NET) и выдает такую ошибку. Может я что-то не то делаю? Пробовал компилировать, потом запускать CallCS.exe, та же ошибка в консоли. Взял ту же библиотеку ClassLibrary1.dll подключил к C#-файлу и… работает. А с паскалем не работает =(.
У меня компилируется и запускается… Возможно у вас где то слишком большой путь к папке примеров, или что то типо того? Пробовали переустановить паскаль?