type
MyClass = class of TMyClass;
...
Obj := MyClass.Create;
을 작성하면 올바른 생성자 (TMyClass에있는 생성자)가 호출됩니다.
var
ClassVar : TClass;
...
ClassVar := TMyClass;
Obj := ClassVar.Create;
을 쓰면 TObject 생성자 만 호출됩니다.
이유가 무엇입니까? 두 버전의 차이점은 무엇입니까? 두 번째 시나리오에서 TMyClass 생성자 호출을 강제로 수행 할 수 있습니까?
+1 감사합니다. 가상 생성자에 대해 나쁜 점이 있습니까? 특히 TObject.Create가 가상이 아닌 이유가 무엇입니까? – jpfollenius
아마도 가상 일 필요가 없기 때문일 것입니다. 첫째, 가상 메서드 호출은 동일한 서명으로 만 작동하며 대부분의 생성자는 적어도 하나의 매개 변수를 사용합니다. 둘째, 이런 식으로 팩토리 패턴을 사용한다면 어쨌든 특정 클래스의 자손을 원할 것입니다. –