为什么只用一个静态函数创建一个类?

时间:2014-07-16 09:54:24

标签: delphi

最近我遇到了以下代码:

interface

TSomeClass=Class
public
  class function SomeFunction(sMyString: string) : ISomeInterface;
end;

implementation

TSomeClass.SomeFunction(sMyString: string) : ISomeInterface;
begin
  ...Get some dependency.
end;

基本上是一个包含1个类函数的类。

这个结构的好处是什么,而不仅仅是一个单元中的函数,而不是它是一个类的一部分?

像:

interface
function SomeFunction(sMyString: string) : ISomeInterface;

implementation

SomeFunction(sMyString: string) : ISomeInterface;
begin
  ...Get some dependency.
end;

1 个答案:

答案 0 :(得分:9)

主要归结为个人选择。

但是,类函数提供的一个好处是伪造命名空间的方法。假设您要使用的函数名称非常简短且通用。在那种情况下,它可能会与另一个具有相同名称的符号发生碰撞,并在另一个单元中定义。此时您可能会受到单位使用订单变幻莫测的影响,并且可能需要完全限定名称。通过使用类函数,可以强制用户使用其类来限定函数名称。

这里要说的另一点是,您提出的两种替代方案具有潜在的显着差异。您问题中的类函数有一个Self指针。与实例方法不同,它指的是类而不是实例。要使这两个函数完全等效,您可以将类函数声明为static

class function SomeFunction(sMyString: string): ISomeInterface; static;

当然,使用非静态类函数可以做的一件事是,它可以在需要of object方法类型的地方使用。