Tag: operator overloading

我应该何时在C#中定义(显式或隐式)转换运算符?

C#的一个鲜为人知的特性是可以创建隐式或显式的用户定义类型转换 。 我已经写了6年的C#代码了,我从来没有用过它。 所以,我担心我可能错过了好机会。 什么是用户定义转换的合法,良好用途? 您是否有比仅定义自定义方法更好的示例? – 事实certificate,微软有一些关于转换的设计指南 ,其中最相关的是: 如果最终用户未明确预期此类转换,请勿提供转换运算符。 但什么时候转换“预期”? 在玩具编号课程之外,我无法弄清楚任何真实世界的用例。 以下是答案中提供的示例摘要: 弧度/度/双 极地/的Point2D 开尔文/华氏/摄氏度 模式似乎是:隐式转换大多数(仅?)在定义数值/值类型时很有用,转换由公式定义。 回想起来,这很明显。 不过,我想知道非数字类是否也可以从隐式转换中受益..?

运算符重载==,!=,等于

我已经经历了一个问题 据我所知,有必要实现== , !=和Equals() 。 public class BOX { double height, length, breadth; // this is first one ‘==’ public static bool operator== (BOX obj1, BOX obj2) { return (obj1.length == obj2.length && obj1.breadth == obj2.breadth && obj1.height == obj2.height); } // this is second one ‘!=’ public static bool operator!= (BOX obj1, BOX obj2) […]

C#中的reflection和运算符重载

这是交易。 我有一个程序将加载给定的程序集,解析所有类型及其成员并编译TreeView(非常类似于旧的MSDN站点),然后为TreeView中的每个节点构建HTML页面。 它基本上采用给定的程序集,并允许用户为文档目的创建自己的类似MSDN的库。 这是我遇到的问题:只要在定义的类中包含操作符重载,reflection就会将其作为“MethodInfo”返回,其名称设置为“op_Assign”或“op_Equality”。 我希望能够捕获这些并正确列出它们,但是我找不到返回的MethodInfo对象中的任何内容来准确识别我正在查看运算符。 我绝对不想只捕获以“op_”开头的所有内容,因为这肯定会(在某些时候)会选择一个它不应该采用的方法。 我知道像这样的“特殊情况”的其他方法和属性设置了“IsSpecialName”属性,但显然不是运算符的情况。 我一直在搜索’网络并且把我的大脑震撼了两天试图找出这个,所以任何帮助都将非常感激。

为什么我不能在C#中重载+ =运算符? 但我仍然可以使用它?

可能重复: 在C#中重载复合赋值运算符的简单方法? 我正在玩事件,思想事件很奇怪。 为什么我不能在generics类中实现它们。 所以我试着发现我不能超载+ =。 从这里找到的语言规范 The overloadable unary operators are: + – ! ~ ++ — true false The overloadable binary operators are: + – * / % & | ^ <> == != > = <= + =未列出。 现在,在你说没有理由超载之前+ =我想提出事实C#有使用+ =运算符的事件以及我试图实现一个有趣的事件并希望使用+ =运算符的事实。 现在,我有一种感觉,有人会说这就是为什么事件存在,因为这是唯一的原因。 但是我想提出你可以使用+ =与TimeSpan结构。 去试试吧, var ts= new TimeSpan(); ts += […]