아래의 유닛에는 구현 섹션에서 선언 한 변수가 있습니다. 유닛에 국한됩니다. 또한 프로 시저를 인수를 취하고 해당 인수를 해당 지역 변수에 지정하는 TYPE 절에서 선언했습니다. 이 TFrame의 각 인스턴스는 passMeTheVar
을 통해 고유 한 변수를 전달받습니다.Delphi Unit 로컬 변수 - 각 인스턴스를 고유하게 만드는 방법?
내가 원하는 것은 프레임의 각 인스턴스가 다른 변수와 다른 변수의 자체 버전을 유지하고이를 사용하여 작동 방식을 정의하는 것입니다. 그러나 어떤 일이 벌어지고있는 것처럼 보이는지는 각 인스턴스에 다른 변수를 명시 적으로 전달하더라도 모든 인스턴스가 동일한 값을 사용한다는 것입니다.
예 :
Unit FlexibleUnit;
interface
uses
//the uses stuff
type
TFlexibleUnit=class(TFrame)
//declarations including
procedure makeThisInstanceX(passMeTheVar:integer);
private
//
public
//
end;
implementation
uses //the uses
var myLocalVar;
procedure makeThisInstanceX(passMeTheVar:integer);
begin
myLocalVar:=passMeTheVar;
end;
//other procedures using myLocalVar
//etc to the
end;
지금 어딘가 다른 형태로 가끔, 디자인 창에 하나의 양식에서 이러한 프레임이이 프레임 하락했습니다, 그리고 등 각각의 적절한 장소에 선언 점에서 독특하다 :
ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;
을하고 내가 할 때 :
ThisFlexibleUnit.makeThisInstanceX(var1); //want to behave in way "var1"
ThatFlexibleUnit.makeThisInstanceX(var2); //want to behave in way "var2"
그들이 보를 모십니다 것 같다 동일한 변수 "myLocalVar"를 공유합니다.
내가 잘못 했습니까? 이것이 올바른 방법이라면 내가 가지고있는 것을 디버깅하는 것입니다 (게시하기에는 너무 거대합니다). 그러나 이것이 원칙적으로 올바르지 않다면 내가 제안한 것을 할 수있는 방법이 있습니까?
편집 :
좋아, 그래서 여기에서 배운 교훈은 클래스 정의가 바로 그 것입니다. 많은 클래스가 하나의 유닛에 들어갈 수 있고 Type
섹션에있는 모든 클래스의 모든 인스턴스는 유닛의 구현 섹션을 공유합니다.
저스틴, 단위 범위에서 선언 된 * 변수 *는 단위 범위에서 선언 된 * 클래스 *와 절대 관계가 없습니다. 모든 것이 클래스에 속하며 소스 파일 당 하나의 클래스 만있는 Java와 혼동 스러울 수 있습니다. 델파이에서는 그 중 어느 것도 사실이 아닙니다. –
구현 섹션의 변수는 유닛 *에 국한되지만 유닛 내부의 모든 코드에 대해 전역입니다. Delphi는 "순수한"객체 지향 언어가 아니기 때문에 클래스 나 인스턴스와 아무 관련이 없습니다. –