Каковы .NET использования и ограничения? - PullRequest
1 голос
/ 04 октября 2009

У меня очень поверхностное представление о .NET и C # / C ++. NET. Я использовал его несколько раз для создания простых, автономных приложений. С моей упрощенной точки зрения, я смотрю на это как на другую «основу», например. слой, поверх ОС, который может быть использован для написания приложений для. Может ли кто-то пролить свет на то, каковы его ограничения и когда это наиболее полезно?

С точки зрения ограничений, можете ли вы, например, написать ..

  • кейлоггер (требуется крюк?)
  • Транскрибер ввода MIDI-клавиатуры (например, принимает ввод MIDI-клавиатуры и транскрибирует его в ноты - требуется сопряжение с драйвером устройства MIDI?)
  • бот для FPS (куча сложных вещей, я думаю)
  • плагин для аудиоплеера (например, Winamp. API, вероятно, в C ++)
  • видеоплеер (например, Windows Media Player)

с использованием только .NET и C # (или C ++. NET, если необходимо)? Даже если бы это было технически возможно, были бы какие-то преимущества использования .NET по сравнению с Win32 API?

С точки зрения полезности, когда .NET наиболее полезен? Я понимаю, что .NET может быть независимым от ОС, иметь кучу классов (так что вам не нужно заново изобретать колесо), может использоваться в разработке для мобильных устройств и т. Д., Но что касается написания приложений для Windows, То, что вы можете сделать с .NET - это лишь часть того, что вы можете сделать с Win32 API. Использует ли .NET в основном удобство, легкость, больше абстракции и тому подобное?

Ответы [ 6 ]

2 голосов
/ 04 октября 2009

С точки зрения полезности, когда .NET наиболее полезен?

Всякий раз, когда вы можете использовать его. Ваш взгляд на .NET кажется очень ограниченным, хотя на самом деле все наоборот: вместо этого вам следует спросить, когда это бесполезно . .NET практически упрощает все аспекты написания программного обеспечения (по сравнению с другими языками Win32, в частности C и C ++).

Это:

  1. Концепция / дизайн программного обеспечения
  2. Написание кода
  3. Тестирование кода
  4. Отладка кода
  5. Развертывание кода

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

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

2 голосов
/ 04 октября 2009

Для беспристрастного понимания .NET Framework, зайдите в Google или посмотрите википедию . На мой взгляд, он может создавать / выполнять «почти» все, что вы хотите делать, как и другие языки / рамки.

ограничения? Ну, в Википедии есть раздел о критике .

1 голос
/ 04 октября 2009

Я бы сказал, что для этих вещей .NET не очень подходит *. Его ниша где-то еще, но она процветает там, потому что у нее есть автоматическое управление памятью, много хороших библиотек, рефлексия и хорошая поддержка инструментов (рефакторинг, просмотр кода, ...).

(*) Я написал плагин аудиоплеера для foobar2000 (C ++) на C # (см. http://foo -title.sf.net ). Я вполне мог представить себе бота FPS, при условии, что вы написали код, чтобы связать его с возможной игрой, которая, скорее всего, будет написана на C ++.

1 голос
/ 04 октября 2009

Преимущество, которое предлагает .NET, в основном относится к двум элементам:

  1. Автоматическое управление памятью = сборка мусора. Вы тратите свое время на реализацию полезных функций, а не на поиск утечек памяти.

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

Эти два результата обеспечивают более высокую скорость разработки, что привлекает большинство разработчиков. Большинство из них не имеют требований к максимально быстрому выполнению кода.

Если вам абсолютно необходимо написать что-то низкоуровневое с помощью указателей и управления памятью, вы можете добавить «небезопасный» блок кода в приложение C # (не уверен, что VB.NET позволяет это). Таким образом, при необходимости вы будете сочетать API более высокого уровня с высокой скоростью выполнения.

Я не уверен насчет регистратора клавиш или видеопроигрывателя, но я полагаю, что это возможно. Что касается видеоплеера, он почти наверняка будет использовать какой-то API, который задействует аппаратное ускорение, поэтому не имеет большого значения, с каким инструментарием вы создали пользовательский интерфейс.

0 голосов
/ 04 октября 2009

Если ваше приложение использует API, ограничений почти нет. Взаимодействие действительно очень хорошее, настолько хорошее, что любой API, который может использовать C, может использоваться из C #.

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

Если вы пишете плагин DLL для другого приложения, история на данный момент не так хороша. Как правило, это не рекомендуется, поскольку в любом процессе может быть загружена только одна версия среды выполнения .NET. например два разработчика пишут расширения контекстного меню для Windows Explorer, ориентированные на разные версии среды выполнения, вторая загружаемая не удастся загрузить.

Это исправлено в версии 4.0, поэтому, начиная с этой версии, также становятся возможными авторские библиотеки DLL плагинов.

0 голосов
/ 04 октября 2009
  • Вы не можете использовать его для приложений реального времени, потому что вы не знаете, когда GC будет запущен. Это означает, что было бы очень трудно использовать медиаплеер на нем.
  • Его нельзя использовать на компьютерах с объемом оперативной памяти менее 64 КБ.
  • Вы не можете использовать его для драйверов устройств внутри ядра. (Но вы можете использовать их вместе с драйвером устройства низкого уровня)

Вот и все. Вы можете использовать .NET на встроенных устройствах, смартфонах, в Linux, на OS X, на iPhone, на XBox 360 и, конечно, на Windows.

.NET часто является просто приятной оболочкой для Win32 или COM API, который использует Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...