【问题标题】:C# adding implict conversions to existing typesC# 向现有类型添加隐式转换
【发布时间】:2011-01-21 02:22:13
【问题描述】:

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

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

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

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

额外问题:库的作者是否应该在其 API 中公开 Vector3 结构之类的内容以促进这方面的易用性?

【问题讨论】:

  • 扩展运算符.. 我喜欢它:)

标签: c# implicit-conversion


【解决方案1】:

您可以为您自己创作的任何类型提供与第三方类型的隐式转换,但您不能添加对两个第三方类型之间的隐式转换的支持。

您可以通过向两种 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 */
}

这大约是您可以期望达到的最佳水平。

【讨论】:

    【解决方案2】:

    不幸的是,您无法添加与您无法更改的类型相互转换的隐式转换。我会推荐你​​提到的解决方法,但你已经提到了:)。

    恐怕连你的奖金问题的答案都是“你不能”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2011-07-01
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多