C#将隐含转换添加到现有类型
在C#中是否有一种方法可以将隐式转换添加到已在其他程序集中定义的类型中?
例如,如果我使用两个不同的程序集,每个程序集都提供自己的Vector3 struct
,并在其API中使用它,那么能够定义一次转换,然后将Foo.Vector3
传递给一个方法就可以了。需要一个Bar.Vector3
,并自动转换。
如果我有库的源,那么我可以添加隐式转换运算符。 如果没有这个来源,我现在每次都使用辅助函数显式地进行转换。 我希望有一个更好的方式。
我意识到我可以使用隐式转换运算符创建自己的Vector3 struct
与其他两个结构,但这并不能解决我想直接将一个(外部定义的)类型的对象传递给期望的方法的所有情况。其他。
额外的问题 :是否有任何库的作者在其API中暴露像Vector3结构这样的东西应该做些什么来促进这方面的易用性?
对于您自己编写的任何类型,您可以为第三方类型提供隐式转换,但不能为两个第三方类型之间的隐式转换添加支持。
通过向两种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 */ }
这是你可以期待达到的最好的。
遗憾的是,您无法添加转换为您无法更改的类型的隐式转换。 我会推荐你提到的解决方法,但你已经提到了:)。
我担心你的奖金问题的答案是“你不能”。