Написать переносимый код .NET или воспользоваться особенностями языка? - PullRequest
0 голосов
/ 18 февраля 2009

Иногда мне нужно преобразовать кусок кода или весь проект из VB.NET в C # или наоборот. К сожалению, преобразование кода иногда не может быть выполнено автоматически из-за внутренних языковых различий. Я имею в виду, например, такие ключевые слова, как yield , доступные в C #, а не в VB.NET или наоборот XML Literal , доступные в VB.NET и не в C #.

Тогда у меня вопрос, если вы когда-нибудь рассматриваете переносимость исходного кода при написании проекта .NET, или вы в полной мере используете специфику языка?

Ответы [ 8 ]

2 голосов
/ 18 февраля 2009

Почему вы хотите конвертировать языки? Учтите, что это гораздо больше, чем два языка .NET, а некоторые очень разные, например F #.

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

И, конечно, несколько языков могут использоваться в одном проекте и даже в одной сборке (хотя и не поддерживаются напрямую VS).

1 голос
/ 18 февраля 2009

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

Если вам нужно преобразовать фрагмент кода с одного языка на другой, вы можете использовать схему «Language1 => IL => Language2». Reflector - отличный инструмент для этого.

1 голос
/ 18 февраля 2009

Я в полной мере использую языковые особенности. Я не считаю, что возможность переноса между языками очень важна, когда так просто вызывать сборки vb из c #, f # или других языков clr.

Я не очень понимаю, почему вы бы даже не стали использовать другие языки, когда не собираетесь использовать предоставляемые ими функции Если вы используете только функции, доступные в VB.Net, зачем переходить на C #?

1 голос
/ 18 февраля 2009

Я стараюсь в полной мере использовать языковые особенности. Все остальное было бы глупо (в моей книге). Моя работа - использовать мои инструменты наилучшим образом, чтобы выполнить работу. И у меня не было необходимости переводить какие-либо из моих программ на другой язык за 20 лет работы программистом (только обновление с другой версии того же языка).

Теперь, когда C # и VB.Net так легко портировать друг на друга, возможно, это изменится. Я знаю, что часто конвертирую C # -examples / project в VB.net, потому что там есть более интересные примеры в C #.

1 голос
/ 18 февраля 2009

Я не вижу смысла писать переносимый код .NET, поскольку вы можете просто связать его, поэтому 99% времени переносить на другой язык .NET бессмысленно . Просто извлеките код, сделайте его DLL и свяжите его.

1 голос
/ 18 февраля 2009

Полное преимущество каждый раз. Я пытаюсь убедиться, что открытые типы в сборке остаются CLS-совместимыми, но это далеко не так. Я склонен оставаться в области C #, но VB имеет (или имела) лучшую поддержку COM с поздним связыванием, и C ++ / CLI необходим при взаимодействии с действительно неудобными библиотеками c ++.

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

1 голос
/ 18 февраля 2009

Я бы никогда не подумал об ограничении использования языка только потому, что когда-нибудь я захочу перенести его на другой язык. Это уменьшит мою производительность и будет означать, что инвестиции в будущее маловероятны.

Я бы особо не делал этого для языков .NET, потому что сборки .NET взаимозаменяемы.

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

1 голос
/ 18 февраля 2009

Я всегда пишу код на C #, я ненавижу синтаксис и многословность VB. Я нахожу C # более точным и лаконичным, возможно, потому что я пришел из мира C / C ++.

Но я никогда не сталкивался с такой проблемой, которая требовалась для преобразования проекта из языка в другой. Не забывайте, что скомпилированная сборка .NET, написанная либо на C #, либо на VB.NET (или что-либо еще), будет использоваться в каждом проекте .NET.

...