dotSITE
Шаблоны проектирования Work in Murano Software. Вопросы/Ответы
новости материалы решения форумы группы настройки/о проекте
Логин/Регистрация
Логин:
Пароль:
Запомнить вас:
Регистрация
Забыли пароль?

Комментарии

Рекомендации по использованию перезагрузки операторов

Цикл статей

Рекомендации по использованию перезагрузки операторов

Далее приведены основные рекомендации по перезагрузке операторов:

  • Определите операторы для типов значений, которые являются логическими встроенными типами языка программирования, например, как структура 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


Контакт Реклама на сайте Спонсорам Веб мастерам

Лицензионное соглашение - © 2000-2010 dotSITE
Хостинг .NET предоставлен PARKING.RU
Поддержку сайта осуществляет Murano Software Inc., Offshore software development