C#将隐式转换添加到现有类型

时间:2011-01-21 02:22:14

标签: c# implicit-conversion

C#中是否有办法将隐式转换添加到已在其他程序集中定义的类型中?

例如,如果我使用两个不同的程序集,每个程序集都提供自己的Vector3 struct,并在其API中使用它,那么能够定义一次转换,然后只传递一个{ {1}}方法需要Foo.Vector3,并将其自动转换。

如果我有库的源代码,那么我可以添加隐式转换运算符。如果没有这个来源,我现在每次都使用辅助函数明确地进行转换。我希望有一个更好的方式。

我意识到我可以使用隐式转换运算符创建自己的Bar.Vector3来自其他两个结构,但这并不能解决我想直接传递的所有情况一个(外部定义的)类型的对象到期望另一个的方法。

奖金问题:是否有任何图书馆的作者在其API中公开类似Vector3结构的内容应该做些什么来促进这方面的易用性?

2 个答案:

答案 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)

很遗憾,您无法添加转换为您无法更改的类型的隐式转换。我会推荐你​​提到的解决方法,但你已经提到过了:)。

我担心你的奖金问题的答案是“你不能”。