2015-07-29 2 views
-2

я получил проблему с установкой глобальной переменной в блоке Delphi:Delphi глобальная переменная сеттер

unit SomeUnit; 
... 
interface 
... 
var 
variable1: String; 
... 
implementation 

procedure TSomeForm.SetNewVersion(variable1: String); 
begin 

    variable1 := variable1; //here is problem 

end; 

Как присвоить значение глобальной переменной, если она имеет такое же имя, как местного значения аргумента от процедуры? Если это какой-то вид значение, которое может быть сделано, как это:

TSomeForm.variable1 = variable1; 

Но проблема в том, когда переменная является глобальной переменной в блоке?

SomeUnit.variable1 = variable1; // this dont work 
+1

У вас нет проблем с установкой глобальной переменной. Скорее всего, у вас есть проблема, что вы используете глобальную переменную. – TLama

+2

Не называйте локальные переменные такими же, как глобальные переменные. Измените имя локальной переменной на другое. Просто как тот. –

+5

'TSomeForm.variable1 = variable1; // это не работает' - это, конечно же, нет. Используйте ': =' для назначения переменных, а не вместо знака сравнения –

ответ

8

FWIW: Следующие работы как можно было бы ожидать:

var 
    SomeForm: TSomeForm; 
    variable1: string; 

implementation 

{$R *.dfm} 

{ TSomeForm } 

procedure TSomeForm.FormCreate(Sender: TObject); 
begin 
    Assert(SomeUnit.variable1 = ''); 
    SetNewVersion('1'); 
    Assert(SomeUnit.variable1 = '1'); 
end; 

procedure TSomeForm.SetNewVersion(variable1: string); 
begin 
    SomeUnit.variable1 := variable1; 
end; 

Чтобы избежать таких проблем, вы можете рассмотреть предваряя аргументы «A», который является своего рода Полустандартные в Delphi. И пока вы на него, сделать строковые const:

procedure TSomeForm.SetNewVersion(const AVariable1: string); 
begin 
    variable1 := AVariable1; 
end; 
7

Вы можете решить вашу проблему, либо:

  • Выбор другого имени параметра (или действительно глобальная переменная). Лично я склонен использовать имя Value для параметра метода сеттера. Или,
  • Полностью квалифицируется как имя SomeUnit.variable1.

Обратите внимание, что оператором присваивания является :=, а не =.

Я настоятельно рекомендую вам пересмотреть дизайн.

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

Если переменная действительно разделена между экземплярами, сделайте переменную переменной private class и setter методом класса.

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

Смежные вопросы