Универсальные интерфейсы Delphi со строковыми типами - PullRequest
2 голосов
/ 03 января 2011

Я попытался определить общий интерфейс в Delphi 2010 (также в XE) и (даже если он компилируется) в отчете об ошибках сообщается о синтаксисе.К сожалению, это также нарушит завершение кода для реализующего класса.Так что мне интересно, если это ошибка IDE или ошибка моих мыслей;)

Интерфейс:

IValue <T> = interface
  function GetValue : T;
  procedure SetValue (Value : T);
end;

И класс реализации:

TSomeClass = class (TInterfacedObject, IValue <string>, IValue <Integer>)
protected
  function GetValue1 : string;
  procedure SetValue1 (Value : string);
  function GetValue2 : Integer;
  procedure SetValue2 (Value : Integer);
  function IValue <string>.GetValue = GetValue1; //from this point error insight complains
  procedure IValue <string>.SetValue = SetValue1; 
  (*....*)
end;

Если я подставлю string через Tstring и определю TString = string, все будет хорошо.Есть идеи или это ошибка Delphi?

С уважением,

Коко

1 Ответ

2 голосов
/ 03 января 2011

Из того, что я заметил, в среде IDE используется другой синтаксический анализатор, чем компилятор.Он известен тем, что помечал вещи как ошибки, которые компилятор принимает без вопросов.Я нашел это особенно верно, когда используются дженерики.Хотя он был улучшен с каждой версией, иногда он ошибается.Несколько предложений:

  1. Убедитесь, что у вас есть последние обновления.
  2. Откройте отчет о контроле качества (или проголосуйте за существующий).Скорее всего, эта проблема решается в XE, чем в 2010 году.
  3. Вы можете попробовать неофициальный IDE Fix Pack Андреаса Хаусладена .Обычно он включает в себя ряд исправлений Code Insight.

Вы также можете попробовать CnPack IDE Wizards .Он включает в себя функцию «Помощник по вводу кода».Это альтернатива для завершения встроенного кода в среде IDE, которая во многих случаях все еще работает, даже если Error Insight обнаруживает ошибки.

...