Как C # вдохновлен C ++ больше, чем Java? [закрыто]

Вот питоновский путь:

attrs = {'a': 1, 'b': 2, 'c': 3}

map(lambda item: setattr(someObject, *item), attrs.iteritems())
20
задан Grace Note 18 May 2010 в 14:30
поделиться

17 ответов

ИМО, идея о том, что C # больше вдохновлен C ++, чем Java, является только маркетинговой; попытка привлечь стойких программистов на C ++ в управляемый мир, чего не могла сделать Java. C # в первую очередь унаследован от Java; любой, кто смотрит на историю, особенно на войны Java VM в середине 90-х между Sun и Microsoft, может увидеть, что Java является основным родителем.

Синтаксис C # ближе к C ++ только в определенных областях: манипуляции с указателями (которые В Java нет), объявления производных (например, открытый класс Foo: Bar, IBaz вместо открытого класса Foo extends Bar реализует IBaz ) и перегрузку операторов.

Все остальное либо аналогично Java (статический main, объявленный в объявлении класса, отсутствие файлов заголовков, одиночное наследование и многие другие), точно так же, как Java и C ++ (базовый синтаксис) или только C # (свойства, делегаты и многие другие).

33
ответ дан 17 October 2019 в 02:38
поделиться

Я рассматриваю C # как управляемую версию C ++, а не как переписанную версию Java. При создании такого языка он, естественно, принял форму Java (синтаксически), но сохранил элементы невероятно мощного C ++.

0
ответ дан 17 October 2019 в 02:38
поделиться

Для чего он стоит Формы C # очень тесно связаны с Java Swing. Библиотеки Gui C ++ в большинстве случаев сильно отличаются.

1
ответ дан 17 October 2019 в 02:38
поделиться

Одним из примеров является оператор сравнения == для строк. C # использует подход C ++ и выполняет лексическое сравнение строки. Java сравнивает строковые ссылки.

Вот хорошая статья MSDN , которая проведет вас через сравнение между C # и Java и C # и C ++.

1
ответ дан 17 October 2019 в 02:38
поделиться

Его имя начинается с буквы C.

51
ответ дан 17 October 2019 в 02:38
поделиться

Я думаю, что связь Java -> C # намного сильнее, чем C ++ -> C #, главным образом потому, что, как уже отмечалось, C # стал результатом иска Sun по поводу предполагаемого нарушения MSVM спецификация Java. В частности, одной из основных претензий Sun было использование J ++ дополнительных ключевых слов / функций, таких как «делегат», которые стали одной из основных отличительных черт C #.

Другие функции, такие как директивы @dll и @com (которые предварительно настроенные атрибуты как в Java, так и в C #) также были частью жалобы. Обратите внимание на сходство между директивами COM PIA в C # и директивами @com в J ++. Сравните JDirect из J ++ с собственным взаимодействием в C #. (Другой причиной иска был тот факт, что MS полностью отключила JNI Java в пользу специфичного для Windows JDirect.)

Наконец, Андерс Хейлсберг - человек, ответственный за J ++ и C #, поэтому связь между Java / J ++ и C # чертовски надежна. Несомненно, у Хейлсберга было много аспектов разума C ++ (в частности, функция указателя / делегата метода, которую он первым реализовал в J ++), но можно с уверенностью сказать, что Java должна была быть на переднем крае.

Во многих отношениях вы можете рассматривать измененную версию Java от Microsoft, J ++ как C # 0.1

7
ответ дан 17 October 2019 в 02:38
поделиться

Однажды у меня было интервью, и я спросил меня, на каком языке был смоделирован C #, и я быстро сказал, что лучше C ++ или Java (C--). Интервьюер сказал: «Неправильно!», Это Delphi. Я не знаю Delphi, так что ...

3
ответ дан 17 October 2019 в 02:38
поделиться

Что ж, я думаю, вы начнете небольшой спор по этому поводу.

Я думаю, что Java - это тоже своего рода обновление / эволюция C ++, так что это, конечно, объясняет сходство с некоторыми степень. Правда, конечно, в том, что C # был вдохновлен как Java, так и C ++ и взял концепции из обоих языков. И, конечно же, многое в области функционального программирования и динамического программирования адаптируется к C #.

Поэтому я думаю, что неправильно говорить, что C # «ближе» к Java, чем к C ++, или наоборот. Это в некотором роде близко к обоим.

4
ответ дан 17 October 2019 в 02:38
поделиться

Во-первых, он позволяет манипулировать указателями (в небезопасных блоках).

5
ответ дан 17 October 2019 в 02:38
поделиться

Это маркетинг. Microsoft определенно не хотела признавать, что «Эй, мы делаем Java 1.1!» Во-первых, это было бы то же самое, что признать, что Java действительно стоит копировать, что является плохим ходом, если вы пытаетесь победить Java.

Во-вторых, это отпугнуло бы всех разработчиков родного языка C ++, которых напугала Неуклюжесть Java и проблемы с производительностью на раннем этапе.

Итак, они говорят, что строят на C ++, и все счастливее.

На самом деле, конечно, ничто не может быть дальше от истины.

Если у C # и Java есть общий предок, это не C ++, а «C с классами»; в частности, самые ранние версии C ++, задолго до того, как он был стандартизован, и до того, как было добавлено большинство из того, что делает его полезным сегодня .

Это была не более чем попытка закрепить некоторые функции ООП на C .

С тех пор C ++ пошел в совершенно другом направлении, избавившись от навязчивой идеи ООП, и изучение гораздо более функционального стиля с использованием формы утиного ввода во время компиляции для создания универсального программирования. К языку добавлены невероятно мощные и элегантные библиотеки. Ничего из этого вообще не представлено в Java или C #.

C # определенно вдохновлен Java больше всего. И там, где он вдохновлен C ++, он вдохновлен этим ранним вариантом «C с классами», а не чем-либо, напоминающим современный C ++.

Но C ++ был и остается многими «крутым» языком. Microsoft хотела использовать это «крутое» и перенести его в .NET.

Лично я считаю C ++, C # и Java своими братьями и сестрами. Все они являются производными от одного и того же протоязыка "C с классами". C # и Java пошли оттуда менее прямым путем, чем C ++, но это ' Это все еще место, откуда они черпали вдохновение. Вот где они унаследовали странное понятие ООП, которое практически не имеет ничего общего с тем, что предлагал Алан Кей / Smalltalk, и именно здесь они унаследовали неуклюжий синтаксис, подобный Си.

Это немного похоже на утверждение, что мы, люди, произошли от обезьян. Не были. Просто у нас есть общий предок, и этот общий предок был чем-то похож на обезьяну. C # не является производным от C ++, у них просто есть общий предок, который был немного похож на C ++.

Просто у нас есть общий предок, и этот общий предок был чем-то похож на обезьяну. C # не является производным от C ++, у них просто есть общий предок, который был немного похож на C ++.

Просто у нас есть общий предок, и этот общий предок был чем-то похож на обезьяну. C # не является производным от C ++, у них просто есть общий предок, который был немного похож на C ++.

2
ответ дан 17 October 2019 в 02:38
поделиться

В аспектах объектно-ориентированного проектирования и наследования C # больше похож на C ++. Например:

class MyClass : MyInterface

вместо

class MyClass implements MyInterface

и

public MyClass() : base()

вместо

public MyClass() { super(); }

Также C # использует идею виртуальных функций, чтобы разрешить перегрузку. В java наследование и перегрузка - это скорее открытое дело, которое необходимо заблокировать. В C ++ и C # он по умолчанию более заблокирован и должен быть открыт.

Другие сходства включают:

  • Передача по ссылке
  • перегрузка оператора
  • указатели / делегаты функций
2
ответ дан 17 October 2019 в 02:38
поделиться

Лично я бы сказал, что он ближе к Java, чем к C ++, но есть несколько дополнений для плавильного котла:

  • Делегаты (примерно указатели на функции)
  • Пользовательские типы значений

Обобщения разные для всех 3, но Java '

5
ответ дан 17 October 2019 в 02:38
поделиться

Я думаю, в том смысле, что C # - это скорее многопарадигмальный язык, нежели навязывание единой парадигмы (ООП), как в JAVA. На самом деле это хорошая вещь, потому что дает больше свободы программистам.

16
ответ дан 17 October 2019 в 02:38
поделиться

Все трое просто близкие родственники.
Чья мать была маленькой.

Кто был отцом каждого языка - другой вопрос?

Ada   + Smalltalk  =>  Java
C     + Smalltalk  =>  C++
?     + Smalltalk  =>  C#
0
ответ дан 17 October 2019 в 02:38
поделиться

Синтаксис, вдохновленный C ++, VM, вдохновленный Java, и библиотеки (в .net 1.1) были почти 1-1 корреляцией с библиотеками Delphi.

8
ответ дан 17 October 2019 в 02:38
поделиться

Если вы помните историю, Microsoft на самом деле пыталась использовать свою методологию «Embrace and Extend» на Java, где они добавляют к ней, так что она будет работать только с окнами и назвал его «J ++».

Sun подала на них в суд, поэтому они выпустили J #, который был очень близок к Java, в качестве временной меры, которая дала им время для разработки собственного языка (C #).

При этом Дело в том, что это была смесь лучших концепций из всех языков, доступных в то время - на самом деле нет смысла говорить, что она была больше основана на одном, чем на другом, это просто конгломерат избранных функций.

Но если вам нравится идея начать с нуля и работать со всеми лучшими на сегодняшний день функциями языков, обязательно загляните в Scala - он выходит далеко за рамки возможностей Java или C #,даже с крупной революцией в функциях.

12
ответ дан 17 October 2019 в 02:38
поделиться

Я, наверное, возьму flak для этого, но да, C# - это, по большому счёту, ответ Microsoft на Java. Это язык, который они могут расширять любым выбранным ими способом (в отличие от Java, где их осудили за то, что они расширяют его несанкционированными способами). Он имеет критические черты Java: управление памятью и большой системной библиотекой. Это C++-подобный или C-подобный в той мере, в какой это необходимо, чтобы заманить C++ и C-разработчиков, которые еще не являются поклонниками Java.

1
ответ дан 17 October 2019 в 02:38
поделиться
Другие вопросы по тегам:

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