C#中是否有办法将隐式转换添加到已在其他程序集中定义的类型中?
例如,如果我使用两个不同的程序集,每个程序集都提供自己的Vector3 struct
,并在其API中使用它,那么能够定义一次转换,然后只传递一个{ {1}}方法需要Foo.Vector3
,并将其自动转换。
如果我有库的源代码,那么我可以添加隐式转换运算符。如果没有这个来源,我现在每次都使用辅助函数明确地进行转换。我希望有一个更好的方式。
我意识到我可以使用隐式转换运算符创建自己的Bar.Vector3
来自其他两个结构,但这并不能解决我想直接传递的所有情况一个(外部定义的)类型的对象到期望另一个的方法。
奖金问题:是否有任何图书馆的作者在其API中公开类似Vector3结构的内容应该做些什么来促进这方面的易用性?
答案 0 :(得分:10)
您可以为自己编写的任何类型提供第三方类型的隐式转换,但不能为两个第三方类型之间的隐式转换添加支持。
通过向两种Vector3类型添加扩展方法,您可以稍微改善两种类型之间转换的优雅;
public static Bar.Vector3 ToBarVector3(this Foo.Vector3 foo) {
return /* instance of Bar.Vector3 */
}
public static Foo.Vector3 ToFooVector3(this Bar.Vector3 bar) {
return /* instance of Foo.Vector3 */
}
这是你可以期待达到的最佳目标。
答案 1 :(得分:2)
很遗憾,您无法添加转换为您无法更改的类型的隐式转换。我会推荐你提到的解决方法,但你已经提到过了:)。
我担心你的奖金问题的答案是“你不能”。