Какого типа следует перегрузка оператора отрицания (! ) есть?

Если я перегружу оператор ! в классе, какой тип он должен вернуть? В книге я нашел это (частичный список):

public class MyType {
    public int IntField { get; set; }

    public MyType(int intField) {
        IntField = intField;
    }

    public static bool operator !(MyType mt) {
        return (mt.IntField <= 0);
}

Он компилируется , но я ожидаю, что оператор ! вернет экземпляр MyType , что-то вроде

public static MyType operator !(MyType mt) {
    var result = new MyType(-mt.IntField);
    return result;
}

На самом деле, я ожидал, что компилятор потребует, чтобы ! оператор возвращает MyType . Но это не так.

Итак ... почему тип, возвращаемый оператором ! , не должен быть содержащим типом? Вы действительно ли должен сделать возвращаемый тип ++ или - содержащим типом.

5
задан comecme 21 June 2011 в 20:50
поделиться