|
|
Рекомендации по использованию перезагрузки операторов
Цикл статей
Рекомендации по использованию перезагрузки операторов
Далее приведены основные рекомендации по перезагрузке операторов:
- Определите операторы для типов значений, которые являются логическими встроенными типами языка программирования, например, как структура System.Decimal.
- Обеспечьте методы перезагрузки операторов только в тех классах, в которых определены методы.
- Используйте имена и условные обозначения сигнатур, описанные в Общеязыковой спецификации (CLS).
- Используйте перезагрузку операторов в случаях, когда сразу очевидно, что будет результат операции. Например, есть смысл иметь возможность вычитать одно значение времени Time из другого и получать промежуток времени TimeSpan. Однако неуместно использовать оператор or, чтобы создать объединение двух запросов базы данных, или использовать shift, чтобы писать в поток.
- Перезагружайте операторы симметрично. Например, если вы перезагружаете оператор равенства (==), вы также должны перезагрузить оператор неравенства (!=).
- Предоставляйте альтернативные сигнатуры. Большинство языков программирования не поддерживают перезагрузку операторов. Поэтому всегда включайте дополнительный метод с соответствующим домен-специфическим именем, который имеет эквивалентную функциональность. Это является требованием Общеязыковой спецификации (CLS). Следующий пример соответствует требованиям CLS.
[C#] class Time { TimeSpan operator -(Time t1, Time t2) { } TimeSpan Difference(Time t1, Time t2) { }}
В данной таблице приведен список символов операторов и соответствующих имен альтернативных методов и операторов.
|
Символ оператора C++ |
Имя альтернативного метода |
Имя оператора |
|
Не определен |
ToXxx или FromXxx |
op_Implicit |
|
Не определен |
ToXxx или FromXxx |
op_Explicit |
|
+ (binary) |
Add |
op_Addition |
|
- (binary) |
Subtract |
op_Subtraction |
|
* (binary) |
Multiply |
op_Multiply |
|
/ |
Divide |
op_Division |
|
% |
Mod |
op_Modulus |
|
^ |
Xor |
op_ExclusiveOr |
|
& (binary) |
BitwiseAnd |
op_BitwiseAnd |
|
| |
BitwiseOr |
op_BitwiseOr |
|
&& |
And |
op_LogicalAnd |
|
|| |
Or |
op_LogicalOr |
|
= |
Assign |
op_Assign |
|
<< |
LeftShift |
op_LeftShift |
|
>> |
RightShift |
op_RightShift |
|
Не определен |
LeftShift |
op_SignedRightShift |
|
Не определен |
RightShift |
op_UnsignedRightShift |
|
== |
Equals |
op_Equality |
|
> |
Compare |
op_GreaterThan |
|
< |
Compare |
op_LessThan |
|
!= |
Compare |
op_Inequality |
|
>= |
Compare |
op_GreaterThanOrEqual |
|
<= |
Compare |
op_LessThanOrEqual |
|
*= |
Multiply |
op_MultiplicationAssignment |
|
-= |
Subtract |
op_SubtractionAssignment |
|
^= |
Xor |
op_ExclusiveOrAssignment |
|
<<= |
LeftShift |
op_LeftShiftAssignment |
|
%= |
Mod |
op_ModulusAssignment |
|
+= |
Add |
op_AdditionAssignment |
|
&= |
BitwiseAnd |
op_BitwiseAndAssignment |
|
|= |
BitwiseOr |
op_BitwiseOrAssignment |
|
, |
Не присвоено |
op_Comma |
|
/= |
Divide |
op_DivisionAssignment |
|
-- |
Decrement |
op_Decrement |
|
++ |
Increment |
op_Increment |
|
- (одинарный) |
Negate |
op_UnaryNegation |
|
+ (одинарный) |
Plus |
op_UnaryPlus |
|
~ |
OnesComplement |
op_OnesComplement |
|