와 절차는이 클래스를 고려하십시오. 이 단순히 언어 제한이 가능이거나 (그리고 나는이 개 방법 중 하나의 이름을 바꿀 필요) : 슬프게도 델파이이 마음에 들지 않고, 컴파일러는 이러한 오류 barfs :클래스 함수/프로 시저 및 인스턴스 기능/같은 이름
[DCC Error] u_myclass.pas(9): E2252 Method 'Foo' with identical parameters already exists
[DCC Error] u_myclass.pas(20): E2037 Declaration of 'Foo' differs from previous declaration
[DCC Error] u_myclass.pas(9): E2065 Unsatisfied forward or external declaration: 'TMyClass.Foo'
내 질문?
unit u_myclass;
interface
type
TMyClass = class
public
class function Foo(A : Integer) : Integer; overload;
function Foo : Integer; overload;
end;
implementation
{ TMyClass }
class function TMyClass.Foo(A: Integer): Integer;
begin
Result := A;
end;
function TMyClass.Foo: Integer;
begin
Result := 1;
end;
end.
AFAIK이 작업은 불가능합니다. 컴파일러는 어떤 함수를 호출할지 알고 있어야합니까? 클래스 함수를 호출 할 때 분명 할 수도 있지만 인스턴스에서 호출 할 때가 아닙니다. –
좋은 지적 Uwe, 그 이유가 있어야합니다 ... – whosrdaddy
그냥 다른 이름을 사용하십시오. 달성하고자하는 것은 IMO가 함수 오버로딩을 악용하는 것입니다. 컴파일러가 그것을 허용하지 않는 것이 좋다. – kludg