gpt4 book ai didi

C# - 运算符重载扩展

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:42 24 4
gpt4 key购买 nike

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

最佳答案

三个选项:

  1. 对它们进行子类化,并为子类编写重载
  2. 为各个类使用 Microsoft 的公开可用源代码(或对其进行反编译),并编写您的重载。从长远来看,这不可维护,也不一定容易,但它会奏效。
  3. 坚持使用您的扩展方法。
  4. 您的类和“克隆”类之间的转换运算符,如下所述。

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

关于C# - 运算符重载扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109598/

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