我有一个带有两个类函数Foo
的示例类。一个接受论证,另一个不接受:
TContoso = class
class function Foo: IUnknown; overload;
class function Foo(bar: IUnknown): IUnknown; overload;
end;
我可以毫无意外地调用我的静态函数:
unk := TContoso.Foo;
但是,如果方法被命名为我想首先称之为:
TContoso = class
class function Create: IUnknown; overload;
class function Create(bar: IUnknown): IUnknown; overload;
end;
然后调用相同的类方法:
unk := TContoso.Create;
无法编译:
对'Create'
的不明确的重载调用
为什么非模棱两可的呼唤变得暧昧?我希望这不是一件武断的事情。
这并不重要,但如果我们忽略这个问题并专注于我所处的情况,有些人会认识到这种模式:
CoXmlWriter = class
class function Create: IXmlWriter; overload;
class function Create(const stream: ISequentialStream): IXmlWriter; overload;
end;
答案 0 :(得分:2)
我认为模糊性与TObject
中声明的具有相同参数的构造函数有关。
然而,在现代版本的Delphi中,代码编译。我认为这是正确的,因为TObject
构造函数未标记为overload
。所以这感觉就像是Delphi 5编译器的bug。
答案 1 :(得分:1)
试试这个:
Contoso = class
class function Create: IUnknown; overload; reintroduce;
class function Create(bar: IUnknown): IUnknown; overload;
end;
(或者可能转换过载;并重新引入;修饰符)