我最近问了一个关于设计主要基于接口和扩展方法的 API的问题。
这让我想知道,是否存在不直接支持扩展方法的 .NET 语言,即使用这样的 API 会变得很痛苦的语言?
我知道扩展方法只是静态方法,可能总是这样调用,但是“对扩展方法的支持”是指更紧密地集成到语言语法中以调用对象上的方法;在 C# 中可以像使用常规方法一样使用扩展方法的方式。
除了 C# 和 VB.NET 之外,哪些更流行的 .NET 语言实际上支持扩展方法,哪些不支持?
我最近问了一个关于设计主要基于接口和扩展方法的 API的问题。
这让我想知道,是否存在不直接支持扩展方法的 .NET 语言,即使用这样的 API 会变得很痛苦的语言?
我知道扩展方法只是静态方法,可能总是这样调用,但是“对扩展方法的支持”是指更紧密地集成到语言语法中以调用对象上的方法;在 C# 中可以像使用常规方法一样使用扩展方法的方式。
除了 C# 和 VB.NET 之外,哪些更流行的 .NET 语言实际上支持扩展方法,哪些不支持?
F#在最近的版本(例如 VS2010 附带的版本)中支持扩展方法。另请参阅此问题的答案“使用 F# 代码中的 C# 定义的扩展方法”。
PowerShell 可以通过扩展类型系统来支持扩展方法。
IronPython似乎支持扩展方法...
clr.importExtensions()
从 2.7 版本开始。IronRuby根据对问题“IronRuby 调用 C# 扩展方法 - 错误 - .NET 3.5 中的兼容性”的回答,支持从 1.4 版(需要 .NET 4)开始的扩展方法using_clr_extensions
。
IronScheme:确实有扩展方法,但我不完全确定它们是否与 C# 3 中的扩展方法相同。
Boo,根据对“我如何在 boo 中使用扩展方法”问题的回答,支持从 0.9.0 版开始的扩展方法。
Nemerle似乎也支持扩展方法(根据其网站上的页面)。
托管 C++:(扩展 stakx 的答案)托管 C++ 支持扩展方法,如您在此答案中所见。
(请随时扩展和改进此答案!)