Scala和C#中的隐式转换

Ric*_*ver 4 c# scala explicit implicit

隐式转换似乎是Scala的一个主要且有争议的特性,而它们似乎在C#中的突出程度要小得多.它们在两种语言中有什么区别?有没有我在Scala中被迫使用implicits的地方,或者我总是可以选择是否希望转换是隐式的还是显式的,就像在C#中一样?通常在C#中,我喜欢明确地进行转换,以便维护程序员意图的类型检查,即使消费者是我自己.

我是否正确地说C#或Scala都不能隐式拆分或组合方法/函数参数?在def myMethod(v1:Int,v2:Int)中不接受Tuple2 [Int,Int]作为其参数列表,def yourMethod(v1:Tuple2 [Int,Int])将不接受两个整数作为其参数列表.据推测,语言设计者必须考虑隐式/显式参数分割/组合.当使用多个但相似的图形库的点结构时,我确实发现这个特性是可取的.

Edm*_*984 9

Scala和C#隐式转换之间的关键区别在于Scala中更灵活的作用域规则,它允许您定义哪些以及哪些隐式转换在哪些范围内可用.

在C#中,隐式转换是一种表示您的某个类可以被视为另一个类的方式,在Scala中它允许您仅在某些上下文中添加特定功能来修饰您的类.

另外,虽然需要在类本身中定义C#中的隐式转换,但在Scala中,您可以在外部添加隐式转换,这是一个用于装饰预先存在的类的强大工具:Scala带有一组预定义的显式转换.