Определить новые операторы в С#?

Возможный дубликат:
Возможно ли создать новый оператор в С#?

Мне нравится С#, но мне хотелось бы, чтобы это была возможность определять мои собственные операторы на классах, например A = > B, вместо того, чтобы делать A.Implies(B). Я думаю, было бы здорово, если бы вы могли назначить идентификатор любой длины в наборе типа [+ - */& ^ |% $# @ > <] + методу класса, а затем использовать его как оператор. Кто-нибудь знает, есть ли какое-то расширение или если это возможно сделать, что это делает?

Ответы

Ответ 1

Это не встроено в язык. Вы застряли в перегрузке предопределенных операторов, которые поставляются с языком (перегружаемые операторы).

Если вам нравится этот стиль отладки, вы можете рассмотреть F #. Это функциональный язык, который работает поверх платформы .NET и дает вам возможность определять любой оператор, который вы хотите.

Ответ 2

Список операторов, которые могут быть перегружены, здесь.

Перегрузка оператора позволяет изменять поведение операторов, а не определять новые.

И хотя A => B как A.Implies(B) может показаться классным, это вызовет проблемы позже (через 6 месяцев, когда вы пытаетесь выяснить, что должен делать ваш код).

Ответ 3

Короче говоря, нет. Вам нужно будет посмотреть на другой язык. Вы можете перегружать многие из существующих операторов или определять любые другие методы (включая методы расширения, которые очень удобны), но вы не можете определить пользовательские операторы в любом варианте С#, о котором я знаю.

Ответ 4

Нет, это невозможно, если только вы не создаете собственный С# -подобный компилятор.

Вы можете только переопределить некоторые из встроенных операторов, вы не можете создавать новые, а lambda operator (= > ) нельзя переопределить.