Почему Моно использование? [закрытый]

Просто добавьте следующие ответы:

Если вы не переопределяете Equals, то по умолчанию используется сравнение ссылок объектов. То же самое относится к hashcode - приведение по умолчанию обычно основано на адресе памяти ссылки. Поскольку вы переопределили Equals, это означает, что правильное поведение заключается в сравнении того, что вы внедрили в Equals, а не в ссылках, поэтому вы должны сделать то же самое для hashcode.

Клиенты вашего класса ожидают, что хэш-код будет иметь схожую логику с методом equals, например, методы linq, которые используют IEqualityComparer, сначала сравнивают хэш-коды и только если они равны, они будут сравнивать Equals ( ), который может быть более дорогим для запуска, если бы мы не реализовали hashcode, у равного объекта, вероятно, будут разные хэш-коды (потому что они имеют другой адрес памяти) и будут ошибочно определены как не равные (Equals () даже не попадут ).

Кроме того, кроме проблемы, что вы не сможете найти свой объект, если вы использовали его в словаре (потому что он был вставлен одним хэш-кодом, и когда вы его ищете, хэш-код по умолчанию будет вероятно, будет отличаться, и снова Equals () даже не будет вызван, как объясняет Марк Гравелл в своем ответе, вы также вводите нарушение концепции словаря или хешета, которая не должна допускать идентичные ключи - вы уже заявили, что эти объекты по существу то же самое, когда вы переопределяете Equa поэтому вы не хотите, чтобы оба они были разными ключами в структуре данных, которые предполагают наличие уникального ключа. Но поскольку у них есть другой хэш-код, «тот же» ключ будет вставлен как другой.

33
задан joel.neely 22 February 2009 в 06:07
поделиться

12 ответов

Ответ довольно очевиден: потому что Вы хотите использовать .NET на Linux.

Это, конечно, вызывает вопрос (который я думаю, действительно, что Вы достигаете): почему Вы хотели бы использовать .NET на Linux (по Java)?

Партии причин:

  • Общий код между Вашим сервером и, скажем, приложением WPF или Winforms;
  • Использование конкретного языка .NET, как F#;
  • функции Language, которые не находятся в Java (закрытия, перегрузка оператора, частичные классы, дженерики во время выполнения, индексаторы, делегаты, LINQ, типы var, и т.д. и т.д. и т.д.);
  • Ваши навыки или те из Вашей команды уже находятся в C#;
  • и т.д.
62
ответ дан cletus 11 October 2019 в 07:43
поделиться

Я думаю, что это сводится к персональному предпочтению. Я доволен c#, и я хочу разработать приложения, что я могу работать на своем Ноутбуке Ubuntu или своем Ноутбуке Vista. Поэтому я использую моно. Если я был более доволен Java, то это, вероятно, что я использовал бы.

Просто мои 2 цента.

4
ответ дан Krakerjak 11 October 2019 в 07:43
поделиться

одним словом? Межплатформенный

1
ответ дан fmsf 11 October 2019 в 07:43
поделиться

Каким образом никто не упомянул, что Linux является бесплатным?

0
ответ дан 11 October 2019 в 07:43
поделиться

Я работал на компанию однажды, основной продукт которой был записан в ASP.NET. Они поняли, что могли, вероятно, увеличить свою долю рынка, если они могли бы заставить свой продукт работать на серверах Linux. Это, конечно, было бы довольно трудно, если бы не Моно. Мне дали задачу пребывания в течение некоторого времени, видя, сколько (если таковые имеются) их кода будет работать под Моно. Это было бы приблизительно 2 года назад - большая часть из скомпилированного, но поддержка Mono дженериков, в то время, когда оставлено немного для желания. Я думаю его зрелое с тех пор, но часть кода даже не проанализировала бы. Код также использовал p/invoke немного для вызова собственного кода, так, чтобы сделанным вещами немного интересный также. Это, конечно, была забавная попытка получить его выполнение, все же.

2
ответ дан Jeff Barger 11 October 2019 в 07:43
поделиться

Моно находится позади на некоторых вещах, но пути вперед на других. Например, Моно поддержки SSE и полный заранее компиляция - встроили. С другой стороны... это собирается взять Моно когда-то для реализации всего нового предстоящего материала в предстоящем выпуске .NET..., например... довольно обширные параллельные библиотеки.

2
ответ дан Community 11 October 2019 в 07:43
поделиться

Некоторые люди как C# лучше, чем Java. Кроме того, полагайте, что C# является языком стандарта ISO, в то время как Java не. Возможно, Вы хотите выполнить код ASP.NET сервера Linux? Существует много причин, действительно.

7
ответ дан Erik Funkenbusch 11 October 2019 в 07:43
поделиться

Как все говорят, "выполнить C# на Linux" или, "чтобы быть межплатформенными" или что бы то ни было.

причина, почему я интересуюсь Моно - и я не был убежден затронуть, это, все же - является возможность использовать в своих интересах все вещи, что .NET должен предложить тот Java, не делает. В основном Ваш вопрос действительно сводится к Java по сравнению со сравнением .NET, и я не собираюсь начинать пробегать миллион точек сравнения между ними (в Google, Вы найдете множество сравнений J2EE по сравнению с ASP.NET, который является одной частью и Java по сравнению с C#, который является другим).

, Но какова большая разница между .NET и Java? Это имеет отношение к монолитной силе позади .NET (Microsoft, и Novell пытается перевести это в другие платформы), или подход разных производителей Java. Просто процесс выбора App Server мог бы состоять достаточно в том, чтобы некоторые люди выбрали Mono.

, Что делает одного крупного монолитного поставщика как Microsoft, дают Вам, что Java, кажется, не имеет:

  1. Централизованная документация (была "Удивительно хорошая документация, все в одном месте", но несколько человек сказали мне, я неправ)
  2. Никакая потребность сделать отдельные выборы платформ (например, ASP.NET или ASP.NET, не servlets+JSP+JSTL? +Axis)
  3. Другой материал, который я забываю

И затем существуют другие значительные различия: Java является единственным языком и Моно (я думаю), может выполнить скомпилированный код CLR от множества языков.

2
ответ дан Dan Rosenstark 11 October 2019 в 07:43
поделиться

Лично, я имею больше доверия платформе Linux как сервер, но хочу использовать C# в качестве языка программы.

11
ответ дан Avram 11 October 2019 в 07:43
поделиться

Так как Microsoft отправляет изменения в стандарте ISO C#, прежде чем они сделают их, в Моно теории не должен запаздывать.NET. В действительности большой старый бюджет MS добирается до финишной черты сначала.

2
ответ дан Beep beep 11 October 2019 в 07:43
поделиться

Вы хотите использовать C# на iPhone, Wii и возможно Android в некотором моменте в будущем. См. эту ссылку. http://arstechnica.com/open-source/news/2009/01/open-source-mono-framework-brings-c-to-iphone-and-wii.ars

8
ответ дан Josh Kelley 11 October 2019 в 07:43
поделиться

По сути, я использовал моно в качестве кросс-компилятора. Я добавил несколько строк "exec" в существующий файл сборки java / ant для вызова mono в качестве компилятора, так что был единый, полный процесс сборки из командной строки.

Мне пришлось написать слой оболочки C # вокруг некоторого кода ПК который наша база кода java-on-linux должна была использовать, но я не мог заставить себя запустить Visual Studio (на отдельном компьютере) только для того, чтобы выполнить проверку и процесс сборки.

0
ответ дан 27 November 2019 в 17:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: