C# - 运算符重载扩展

C# - Operator Overload Extensions

C# 是一种多才多艺的语言;它给了你很大的自由来操纵你自己的和现有的 类。您可以重载运算符以将 +* 用于自定义对象,并且您可以扩展现有对象以向它们添加新方法。但出于某种原因,C# 不允许您将运算符重载作为对现有 类 的扩展。为什么是这样?有没有解决方法,或者如果我想为现有 类 编写运算符重载,那么我应该只制作 .Plus().Times() 扩展方法吗?

三个选项:

  1. Subclass 它们,并为 subclass
  2. 编写重载
  3. 为相应的 classes 使用 Microsoft 的公开可用源代码(或反编译它们),并编写您的重载。从长远来看,这是不可维护的,或者不一定容易,但它会起作用。
  4. 坚持使用您的扩展方法。
  5. class 和 "clone" class 之间的转换运算符,如下所述。

OP在评论中特别提到使用System.Drawing.PointF。我过去所做的,使用像这样的密封 classes,是使用如上所述的 .NET 源代码开发第二个类似的 class。我们称这秒为 class MyCustomPointF。我可以为我的新 class 编写运算符。但我还要添加的是所谓的 implicit conversion operator,它可以帮助编译器在我需要时将我的 class 实例转换回 System.Drawing.PointF 实例(无需调用外部转换功能)。它并不完美,但它是一种选择。