Почему нельзя перегружать операторы внутри статического класса?

У меня есть класс расширения для System.Net.IPAddress, и я хотел перегрузить бинарные операторы >, <, ==, но компилятор говорит мне, что я не могу перегружать эти операторы внутри статического класса, который должен быть для других моих методов расширения. Есть ли для этого особая причина?

Спасибо.


person lumberjack4    schedule 11.02.2010    source источник
comment
Мы рассматривали возможность добавления операторов расширения в C# 4, но они не укладывались в бюджет и были урезаны. Надеюсь, мы получим их в гипотетической будущей версии языка.   -  person Eric Lippert    schedule 11.02.2010
comment
@Eric: Я надеюсь, что вы превратите их в настоящую будущую версию! :) Я слышал о функциональном программировании, но не о гипотетическом! Это новая парадигма?   -  person Chris Dunaway    schedule 11.02.2010
comment
@Chris Dunaway: Да, сейчас это более известно как квантовое программирование.   -  person jason    schedule 11.02.2010
comment
@Chris: мы не объявляли о каких-либо изменениях в C# после C# 4. С моей стороны было бы преждевременно обсуждать возможные функции продукта, который мы не анонсировали и который может не состояться. Поэтому любое обсуждение возможных будущих функций гипотетической следующей версии C# следует рассматривать как контрфактические размышления только в развлекательных целях.   -  person Eric Lippert    schedule 11.02.2010


Ответы (1)


Операторы должны относиться к экземплярам того типа, в котором они объявлены. Поскольку у вас не может быть экземпляров статического класса, нет смысла определять операторы.

В .NET нет «операторов расширения».

Для ваших целей рассмотрите возможность реализации IComparer<T> (охватывает < и >) и/или IEqualityComparer<T> (охватывает ==, или вы можете просто использовать сравнение, возвращающее 0; это зависит от того, считаете ли вы, что "сортирует равные" и "равные "то же самое).

person Marc Gravell    schedule 11.02.2010
comment
Вы даже заставили Джона Скита удалить свой ответ - person Jan Jongboom; 11.02.2010
comment
@ Ян - ну, мой тоже был на 50 секунд раньше ;-p - person Marc Gravell; 11.02.2010