【问题标题】:Is there any way to show what a specific custom overloaded operator does?有什么方法可以显示特定的自定义重载运算符的作用?
【发布时间】:2018-05-23 13:20:30
【问题描述】:

有没有办法给重载的操作符提供一个等效的方法摘要?

即我有以下带有重载 + 运算符和自定义方法的对象:

CustomObject objectA = new CustomObject();
CustomObject objectB = new CustomObject();

objectA.MyInt = 10;
objectA.MyString = "hello"; 

objectB.MyInt = 55;
objectB.MyString = "apple";

objectA.CustomMethod(34);

objectA += objectB; 

如果此对象在库中并且我正在使用它,我可以将鼠标悬停在自定义方法上以查看创建者编写的摘要,以了解该方法的作用。有没有类似的方法可以看到重载运算符的效果?

在此示例中,您不知道它将对值或字符串做什么。求和并追加?最大和替换?乘以忽略?

【问题讨论】:

  • 在您的方法上方插入(类型)///,它将添加摘要块(如果您使用的是 Visual Studio)。
  • 此评论不是为了回答问题,而是提供一个意见:如果从上下文中不能完全清楚重载运算符的作用,则不要重载运算符 .人们会想到,他们想要制作“可爱”的重载,其中 Customer 加 Product 等于 PurchaseOrder 并且它会生成无法理解的代码。重载 + 用于复数、向量和其他具有明确定义的加法运算符的数学对象。
  • @EricLippert 是的,这是为了方便。方法需要给出成功或失败,并且还需要从异常中传回任何错误消息。本例中的类是一个Result类,需要将多个数据库存储结果加在一起。本质上,如果任何添加的结果为假但也连接任何返回的错误消息,则它需要为假。本质上重载运算符只是意味着编写管理器的人不需要为每次调用数据库进行这些检查。
  • 我认为重载求和操作意味着“在错误缓冲区中累积错误信息”在 C# 中是一种非常糟糕的编程实践。听起来您正在尝试重新发明错误单子;为什么不只使用错误单子?或者就此而言,只需使用Task<T>,因为它是错误单子行为的超集。

标签: c# overloading summarization


【解决方案1】:

考虑以下代码,它演示了/// <summary></summary> 标签的使用:

public class Test
{
    /// <summary>Returns a new Test with X set to the sum of lhs.X and rhs.X</summary>
    public static Test operator+ (Test lhs, Test rhs)
    {
        return new Test {X = lhs.X + rhs.X};
    }

    public int X;
}

class Program
{
    public static void Main()
    {
        Test a = new Test {X = 1};
        Test b = new Test {X = 2};
        Test c = a + b;
    }
}

如果您将鼠标悬停在 Test c = a + b; 行中的 + 上,工具提示会显示:

返回一个新的测试,其中 X 设置为 lhs.X 和 rhs.X 之和

(我确信应该有一个重复的问题,但我进行了搜索,但找不到特定于运算符重载的问题。)

【讨论】:

  • 谢谢。我试过总结,它似乎没有工作。我很可能悬停在错误的部分上,因为它确实看起来工作正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-01
  • 1970-01-01
  • 2016-07-18
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
相关资源
最近更新 更多