c# -操作符重载扩展

本文关键字:扩展 重载 操作符 | 更新日期: 2023-09-27 18:03:36

c#是一门通用语言;它为您提供了很大的自由来操作自己的和现有的类。您可以重载操作符以使用自定义对象的+*,并且您可以扩展现有对象以向它们添加新方法。但是由于某些原因,c#不允许将操作符重载作为现有类的扩展。为什么会这样?是否有解决方法,或者如果我想为现有类编写操作符重载,那么我应该只是使.Plus().Times()扩展方法?

c# -操作符重载扩展

三个选项:

  1. 子类化它们,并为子类
  2. 编写重载。
  3. 为各自的类使用微软公开可用的源代码(或反编译它们),并编写您的重载。从长远来看,这是不可维护的,也不一定容易,但它会起作用。
  4. 坚持你的扩展方法。
  5. 类和"克隆"类之间的转换操作符,如下所述。
在评论中,OP特别提到了使用System.Drawing.PointF。我过去使用这样的密封类所做的是使用上面描述的。net源代码开发第二个类似的类。我们称这第二类为MyCustomPointF。我可以为我的新类编写操作符。但是我还要添加的是所谓的隐式转换操作符,它可以帮助编译器在我需要时将类的实例转换回System.Drawing.PointF实例(无需调用外部转换函数)。这不是完美的,但这是一个选择。