找不到pascal的资料,只有C#的。是微软写的……下面的规则概括了运算符重载指南:
在作为逻辑内置语言类型的值类型(如 System.Decimal 结构)上定义运算符。
仅在定义方法的类中提供运算符重载方法。C# 编译器强制使用该指南。
使用公共语言规范 (CLS) 中描述的名称和签名约定。C# 编译器自动实现此功能。
当运算结果将十分明显时使用运算符重载。例如,能够从一个 Time 值减去另一个 Time 值以得到 TimeSpan 是有意义的;而用 or 运算符创建两个数据库查询的联合,或者用 shift 向流写入则是不适当的。
以对称方式重载运算符。例如,如果重载相等运算符 (==),则还应该重载不相等运算符 (!=)。
提供替换签名。大多数语言不支持运算符重载。因此,对于所有重载运算符的类型,CLS 都要求包含一个辅助方法(具有相应的特定于域的名称)来提供等价的功能。提供这种辅助方法是公共语言规范 (CLS) 的要求。下面的示例符合 CLS。
public struct DateTime
{
public static TimeSpan operator -(DateTime t1, DateTime t2) { }
public static TimeSpan Subtract(DateTime t1, DateTime t2) { }
}
下表包含运算符符号列表以及相应的替换方法和运算符名称。
C++ 运算符符号
替换方法名称
运算符名称
未定义
ToXxx 或 FromXxx
op_Implicit
未定义
ToXxx 或 FromXxx
op_Explicit
+(二进制)
Add
op_Addition
-(二进制)
Subtract
op_Subtraction
*(二进制)
Multiply
op_Multiply
/
Divide
op_Division
%
Mod
op_Modulus
^
Xor
op_ExclusiveOr