哪些编程语言支持委托隐式接口实现?
What programming languages support implicit interface implementation by delegation?
Kotlin 可以做这个非常巧妙的技巧:
class Derived(b: Base) : Base by b
这使得你的 class Derived
实现 Base
,并且 Base
的所有未在 Derived
中明确实现的方法自动委托给成员 b
。我不使用 Kotlin 编程,丢失 'this'
指针可能会受到很大限制,但它看起来是一件如此简单的事情,可能意味着每种语言都应该拥有的大量可维护性。
一些有代表的语言:
所有允许覆盖某种缺失方法的语言,都可以轻松实现委托(使用通常所谓的 missing method proxy
):即:Ruby、Python, JavaScript es6, Smalltalk
使用 Ruby 的方法代理缺失示例(取自 here ):
class Proxy
def initialize(subject)
@subject = subject
end
private
def method_missing(method, *args, &block)
@subject.send(method, *args, &block)
end
end
proxied_array = Proxy.new([1,2,3])
puts proxied_array.size # 3
Delphi has implements keyword
IMyIntf = interface
procedure DoWork1();
procedure DoWork2();
...
end;
TMyClass = class(TInterfacedObject, IMyIntf)
private
FIntf: IMyIntf;
public
property Prop: IMyIntf read FIntf implements IMyIntf;
end;
Kotlin 可以做这个非常巧妙的技巧:
class Derived(b: Base) : Base by b
这使得你的 class Derived
实现 Base
,并且 Base
的所有未在 Derived
中明确实现的方法自动委托给成员 b
。我不使用 Kotlin 编程,丢失 'this'
指针可能会受到很大限制,但它看起来是一件如此简单的事情,可能意味着每种语言都应该拥有的大量可维护性。
一些有代表的语言:
所有允许覆盖某种缺失方法的语言,都可以轻松实现委托(使用通常所谓的
missing method proxy
):即:Ruby、Python, JavaScript es6, Smalltalk
使用 Ruby 的方法代理缺失示例(取自 here ):
class Proxy
def initialize(subject)
@subject = subject
end
private
def method_missing(method, *args, &block)
@subject.send(method, *args, &block)
end
end
proxied_array = Proxy.new([1,2,3])
puts proxied_array.size # 3
Delphi has implements keyword
IMyIntf = interface
procedure DoWork1();
procedure DoWork2();
...
end;
TMyClass = class(TInterfacedObject, IMyIntf)
private
FIntf: IMyIntf;
public
property Prop: IMyIntf read FIntf implements IMyIntf;
end;