2010-02-11 2 views
7

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

Спасибо.

+0

Мы рассмотрели вопрос о добавлении «операторов расширения» на C# 4, но они не вписались в бюджет и были разрезаны. Надеюсь, мы подберем их в гипотетическую будущую версию языка. –

+0

@ Эрик: Я надеюсь, вы получите их в «настоящую» будущую версию! :) Я слышал о функциональном программировании, но не о гипотетическом программировании! Это новая парадигма? –

+0

@ Chris Dunaway: Да, на данный момент он более известен как «квантовое программирование». – jason

ответ

12

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

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

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

+0

У вас даже был Джон Скит, удаливший его ответ –

+0

@Jan - ну, у меня тоже было 50 секунд; -p –

Смежные вопросы