从 C# 背景开始摸索 F#。
在 C# 中,决定何时使用接口和何时使用抽象类有明显的区别。在 F# 中,我发现两者几乎合而为一。我知道,就 CLR 而言,F# 中的做法与 C# 中的做法相同,但是在 F# 中编程时使用的“最佳实践”是什么?
我应该完全避免类继承吗?
我认为接口比抽象类使用得更频繁(与 C# 等面向对象语言相比)。
在许多情况下,您不需要两者中的任何一个,因为您可以只编写高阶函数(将函数作为参数,而不是将接口作为参数)。但是,有时您可能有两个始终一起使用的函数 - 在这种情况下,您可以将两个函数分组到一个接口中:
// Instead of using higher-order function
val foo : (int -> string) -> (string -> int) -> ...
// ..we can define an interface
type TwoWayConversion =
abstract ToString : int -> string
abstract FromString : string -> int
val foo : TwoWayConversion -> ...
我认为这是非常有用的 F# 编程模式,它完美地使用了接口功能风格.
另一方面,只有在编写应该从 C# 中使用的面向对象代码(例如实现 F# 抽象类的 C# 代码)时,我才会使用抽象类 - 因为从 C# 的角度来看,这是一个自然的可扩展性点。但是,我认为惯用的 F# 代码使用与 C# 不同的扩展点(例如,将函数/接口作为参数),因此您实际上并不需要抽象类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)