gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:23:33 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com