作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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 */
}
这大约是您可以期望达到的最佳效果。
关于C# 向现有类型添加隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754815/
我是一名优秀的程序员,十分优秀!