Обобщения и «Один из параметров бинарного оператора должен быть содержащего типа» Ошибка - PullRequest
4 голосов
/ 31 июля 2011

При объявлении бинарного оператора, по крайней мере один из типов операндов должен быть содержащим типом. В целом это звучит как хорошее дизайнерское решение. Однако я не ожидал, что следующий код вызовет эту ошибку:

public class Exp<T>
{
    public static Exp<int> operator +(Exp<int> first, Exp<int> second)
    {
        return null;
    }
}

В чем проблема с этим оператором? Почему этот случай попадает в ограничения перегрузки операторов c #? Опасно ли разрешать такого рода декларации?

Ответы [ 2 ]

5 голосов
/ 31 июля 2011

Поскольку тип содержимого Exp<T>, а не Exp<int>.То, что вы пытаетесь сделать здесь, это специализация а-ля C ++, что невозможно в C #.

3 голосов
/ 31 июля 2011

Вы относитесь к классу типа Exp<T>, и ни один из параметров в операторе не является Exp<T>, они оба Exp<int>.

Чтение эта статья за предложенный способ обойти это.

...