당신은 abstract virtual
방법을 사용하여 IField.IFieldMethod
를 구현하는 클래스를 가지고 감사, 당신은 Constructing instance of <TType> containing abstract method <MethodName>
무시했습니다.
다음은 오류를 보여주는 간단한 콘솔 데모 코드입니다. (Item[i] as IField).IFieldMethod
을 사용하여 IFieldMethod
을 호출한다는 사실은 새로운 정보를 제공하지 않으며 문제의 원인 만 숨 깁니다. 로컬 변수에 IField
형 인터페이스 참조를 저장하고 당신이 내 코드를 가지고 :
program Project23;
{$APPTYPE CONSOLE}
uses
SysUtils,
Classes;
type IDummyIntf = interface
procedure DoStuff;
end;
type TDummyImp = class(TInterfacedObject, IDummyIntf)
procedure DoStuff;virtual;abstract; // TDummyImp implements IDummyIntf.DoStuff using a VIRTUAL ABSTRACT method.
end;
var X: IDummyIntf;
begin
X := TDummyImp.Create; // <-- Warning at this line, Constructing instance of TDummyImp containing abstract method TDummyImp.DoStuff
X.DoStuff; // This raises EAbstractError because TDummyImp doesn't actually implement DoStuff
ReadLn;
end.
I의 잘못은 읽기 문제를 내가 내 바보 같은 대답을 삭제하기 전에 다음 내 인터넷 연결이 사망했다. 이제 돌아 왔으므로 올바른 답을 주셨습니다. +1 –
참. IField 및 TFieldType1을 구현하는 TField와 IFieldMethod가 가상 인 TField를 구현하는 TFieldType2가 있습니다. 추상; TField에서. 나는 무시하려고하지 않는다. TFieldType1 및 FieldType2의 메소드 이것은 내 오류입니다. 유사한 오류를 찾아 보는 누군가가 이해할 수 있도록이 설명을 쓰고 있습니다. 감사합니다. – elector
**주의 : 메타 클래스를 통해 간접적으로 클래스를 인스턴스화하면 컴파일러는 추상 메소드에 대한 경고를 발행하지 않습니다 (더 이상 문제를 감지 할 수 없기 때문에). –