2012-03-04 2 views
3

Просто из любопытства я пытался найти соответствующие перегрузки оператора для унарных операторов, таких как +, -, * и т. Д. Для Int32 в MsCorLib.dllГде можно увидеть перегрузки операторов примитивных типов с помощью ILSpy?

Я использую ILSpy.

Когда я проверил определение структуры System.Int32, я не мог видеть связанных с перегрузкой операторов.

Q: Я смотрю на неправильное место - тогда где я должен смотреть, чтобы увидеть перегрузки операторов для примитивных типов, или я не должен даже ожидать увидеть эти методы?

+1

Оператор Перегрузки не документированы на MSDN либо, что заставляет меня подозревать, что они не являются частью BCL, но встроенный в C# компилятор. – Oded

ответ

2

Операторы являются частью C# и определены в C# Language Specification.

Пример:

7.7.2 Унарный минус оператор

[...] Предопределенные операторы отрицания являются:

  • Целое отрицание:

    int operator –(int x); 
    long operator –(long x); 
    

    Результат вычисляется путем вычитания x из нуля. [...]

  • с плавающей точкой отрицание:

    float operator –(float x); 
    double operator –(double x); 
    

    В результате величина х с его знаком перевернутым. Если x является NaN, результатом является также NaN.

  • Десятичное отрицание:

    decimal operator –(decimal x); 
    

    Результат вычисляется путем вычитания х от нуля. Десятичное отрицание эквивалентно использованию унарного оператора минус типа System.Decimal.

+0

Итак, вы предлагаете использовать MS Word вместо ILSpy? :) Я видел это в спецификациях CLS, но мне любопытно это заметить - если возможно - в mscorlib.dll – pencilCake

+3

Вы не заметите операторов в какой-либо сборке. Примитивные типы получают специальное лечение от компилятора. Например, если вы добавите два значения 'int', компилятор не выдает команду' call' для вызова операторского метода, который вычисляет результат, а инструкцию 'add', которая вычисляет результат напрямую. – dtb

+0

Значит, это компилятор, который обрабатывает эти операторы на примитивах, а не определения примитивного типа? Правильно? – pencilCake