![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| AlexLd |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 1.2.2007 Репутация: нет Всего: нет |
Привет всем!
В дальнейшем, я хотел перейти на C#.NET с VB.NET! Чего я найду нового? и чем C# лучше? |
|||
|
||||
| bom |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 329 Регистрация: 22.2.2004 Где: Казахстан, Алматы Репутация: нет Всего: 6 |
Другой синтаксис.
Ничем. |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 2 Всего: 15 |
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Пописав на C# три месяца, понял, что он удобнее
|
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Ничем он не лучше, это дело так сказать вкуса. А найдёшь ты различия, одно и то же ключевое слово будет значить совершенно другое. Между прочим если сравнивать с C++, картина абсолютна та же. Кое-чего у тебя в C# не будет, например, выборочные параметры (optional) или статических переменных (static), а кое-что добавится, ну например те же выходные параметры (out) и так далее Если говорить о конкретных различиях, то нужно учитывать версии 7.0, 7.1, 8.0. Вот, например макросы пишутся на VB.NET. В простых случаях это удобно для воздействия на события VS.NET или просто выполнения какой-нибудь команды вызванной пользователем. В общем, за исключением синтаксиса ничего нового нет. Главное же это сила привычки, пиши хоть на чём, лишь бы программы в итоге получались. С точки зрения функциональности языки .NET эквиваленты, да и не может быть иначе, ведь они создавались по одним и тем же правилам. -------------------- ![]() обычный день на винграде |
|||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
В С# есть статик |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
||||
|
||||
| agl |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 25.6.2006 Репутация: нет Всего: 3 |
Не в службу, а в дружбу - что значит статик-переменные в вашем понимании? Или я чего-то непонимаю, или вы ошибаетесь.
Пример статик переменной в С#
?? Это сообщение отредактировал(а) agl - 13.3.2007, 00:03 |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
agl, ты привел пример static-поля. В смысле - поле класса.
А static-переменная объявляется вне принадлежности к классу. Static - в этом случае - определяет область видимости. Для static, если я не ошибаюсь, возможно существование вне функций. в том числе, вне main. ну, вроде глобальной переменной для модуля. Добавлено @ 01:18 нашел здесь:
|
|||
|
||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
В программировании существует такое понятие как область видимости (scope). В Visual Basic.NET она делится следующим образом, хотя тут даже уместнее применить слово вкладывается.
Так вот в типах определяемых пользователям можно вводить элементы, для класса это поля, свойства, методы, события. Все они находятся в области видимости Module. В данном случае мы имеем поле var относящееся к самому типу, но не к его образцу, образец (экземпляр) кстати, называют объектом, а класс или структура от которого он реализован – шаблоном объекта. Поле – это переменная находящаяся на уровне модуля, свойство – переменная находящаяся на уровне модуля с методом проверки значений, метод – функция или процедура находящиеся на уровне модуля, но... Но помимо этого есть ещё такое понятие как локальная переменная. Локальные переменные обитают на уровне процедур и блоков.
Из стандартного примера видно, как объявляется переменная на уровне процедуры (прим. если бы внутри процедуры существовала инструкция, и переменная объявлялась в её блоке, то она соответственно был бы на уровне блоков). В данном случае она ещё и инициализируется значением 0. Когда после запуска программы эта функция вызовется первый раз, произойдёт инициализация в 0, но при последующих вызовах эта инициализация будет игнорироваться, и в итоге мы будем получать всё большее и большее значение. Думаю, принцип ясен, а уж как его использовать и использовать ли вообще дело каждого программиста. Стоит отметить, что в C++ такая же возможность существует издревле и используется то же самое ключевое слово - static. -------------------- ![]() обычный день на винграде |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
||||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Я кстати тоже непонял смысла от этого vb.net, в шестой версии была простота языка, оправдывающая название BASIC. Net технология перешла на абсолютно Си подобные алгоритмы и средства. Я даже начал подумыавть над забавной программкой для переделки vb кода на C#
И тоже, когда поджали обстаятельства, перешел именно на vb.net и C#. Сейчас их параллельно учу и начинаю думать, что хватает одной книги что-бы понять оба языка |
|||
|
||||
| Exception |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Простите, но язык был абсолютно дурацким. От него очень трудно отучаться, и он обычно прививает самые худшие практики программирования.
Не понял вообще. Почему си-подобные?
Такие уже есть То, что языки стали похожи, лишь значит. что VB продвинулся далеко-о-о вперёд, и то, что людям, привыкшим работатьс ущербным VB 6, трудно на него перейти -- вовсе не критерий неудачности языка. То, что языки похожи, это преимущество, так как проще работать в команде и понимать друг друга. Это сообщение отредактировал(а) Exception - 10.4.2007, 12:43 |
||||||
|
|||||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Exception, вот скажите мне, vb.net теперь действительно равняется с другими языками ООП?
Он чем нибудь уступает языку Си например? Если нет, то это всё меня очень радует, признаться мне никогда, не нравился синтакис Си... А как же динамические массивы? В 6.0 они использовались для простоты, но занимали кучу памяти и ресурсов. Они ведь остались? Значит язык всё-равно не является серьёзным? |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
Да, полностью объектно-ориентированный язык. Хочешь используй их, хочешь нет (я, например, ниразу не использовал. Да и массиву предпочитаю коллекцию (Array(of Type))) |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Не понял. Массивы -- они и в C++ и в C# есть и именно в том виде, в котором они есть в VB .NET Добавлено через 1 минуту
Почему же, массивы элементов бывают весьма полезны. Добавлено через 2 минуты и 41 секунду И в VB .NET / C# массивы элементов управления не занимают кучу места и ресурсов |
|||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Exception, Нет, очевидно мы непоняли друг друга
Это в С++ неиспользуется из-зи экономии ресурсов. Там есть массив в куче - vector, но он не является полноценным динамическим массивом, в моём понимании этого термина. |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: нет Всего: 8 |
Kirill89,
Он являеться полноценным динамическим массивом. В полном смысле этого слова. Также ему на помощь имеются map, list. Ты расскажи, что вектор делать не умеет. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Кстати, в VB .NET это тоже не используется. Ну то есть конечно их можно использовать, но остались они только для хоть какой-нибудь совместимости с VB 6. Никто не вынуждает тебя пользоваться этой ерундой, когда есть такие удобные классы как List (Of T) и прочая, прочая. Добавлено через 1 минуту и 8 секунд Кстати, если не ошибаюсь, List (Of T) - это аналог vector<T>. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
А я не говорю, что они неполезны (боже упаси меня от такой ереси) Я говорил про динамические массивы Которые, кстати, декомпилируются в "создание большего массива" + "копирование всех элементов из старого массива в новый" |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Угу, жуткая ересь. Очень полезно бывает почитать отрефлекторенный код.
|
|||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Серьёзно?! Я всегда считал, что просто сдвигается адрес первой и последней ячейки памяти Тогда ясно почему он кушает ресурсы... Несовсем... Вектор хранит только адреса памяти и позволяет делать обход по ним только без указания индекса. Тоесть по этому массиву можно пробежаться только от конца к началу или наоборот. А лист, если я не ошибаюсь, хранит конкретные значения и позволяте обратиться к ним по индексу. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Конкретные значения для ссылочных типов бывают только в куче и нигде больше Во всех переменных всегда хранятся ссылки! И в списке тоже хранятся ссылки, если конечно, это не List (Of Integer) -- тут ты, безусловно, прав. Нет, по индексу к элементы списка не обратишься, хотя средствами LINQ это и реализуется. Туплю, можно. Это сообщение отредактировал(а) Exception - 10.4.2007, 22:37 |
|||
|
||||
| Kirill89 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Exception, ну я небыл уверен, потому, что в большенстве своем пользовался векторм, он позволяет легко лепить такие чудесные вещи как отмена любого колличества действий (как в MS Office)
А лист имеет табличную систему, из чего и следет индекс... Несовсем понял: это как конкретные значения для ссылочных типов? ссылка это тоже тип, хотя и пишется
насамом деле если сделать
То значение переменной *м будет равно следующей ячейки памяти, а не 13. А переменная p приэтом несёт сам адрес переменной типа int. Я могу ошибаться, но помоему, когда я учил было именно так P.S.: извините за жуткий офф топик, но я незнаю как этот код бдет выглядеть в vb.net, если он вообще там возможен. Это сообщение отредактировал(а) Kirill89 - 11.4.2007, 21:50 |
||||
|
|||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Вот тут всё видно А как же ещё? никакие переменные кроме внтренних переменных проекта немогут быть записаны нигде кроме кучи. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Паттерн "Команда" Теперь по поводу памяти. Указателей в .NET (про всякие извраты молчу) нету. Но, с другой стороны, создав, например, массив ссылочных типов и записав объект myObject в элемент массива с индексом ноль, ты туда записываешь не сам объект, а ссылку на него, Другими словами, все переменные ссылочных типов являются указателями, которые "притворяются" обычными переменными. Твоя цитата Массив, список и т.п. всегда хранят именно ссылки на объекты, понимаешь, о чём я |
|||
|
||||
| HappyLife |
|
||||||||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: нет Всего: 8 |
P.S Прошу прощения что к вам залез. Уж очень стало обидно за С++=)
Заранее извиняюсь. И если позволите, поправляю некоторые нюансы. Дабы не было ошибочных мнений.
Вектор не хранит только адреса, вектор хранит всё! Причем все элементы идут строго по порядку. Строго друг за другом. Но если у тебя есть желание хранить адреса, храни. Дело полностью твое. По этому элементу можно пробежаться хоть с середины, да откуда угодно. А лист хранит все тоже самое что и вектор, разница лишь в том что нету индексов. И не факт, что хранит он строго все попорядку.
Я был другого мнения. Абсалютно везде.
Не путать ссылки, и указатели. Ссылка
Абсаюлютно верно. В этом как раз таки и гибкость С++ Добавлено @ 11:41
Да нет. Кроме кучи переменные еще в стеке ошиваются.
Нее... это не адрес, это случайное значение... Адрес перется так
Это сообщение отредактировал(а) HappyLife - 13.4.2007, 11:43 |
||||||||||||||||||||
|
|||||||||||||||||||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
Откуда такие данные? Вы можете это подтвердить документально? Есть два вида памяти: Стек и Куча. В первом хранятся Value-типы, во втором --- Ссылочные и запакованные Value-типы. Возможно, но это еще и потенциальные ошибки выхода за пределы массива и уничтожения чужих данных. В .Net есть специальные классы, которые предоставляют похожую логику -- Итераторы, которые, к тому же безопасны. |
|||
|
||||
| HappyLife |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 642 Регистрация: 17.5.2006 Репутация: нет Всего: 8 |
ivashkanet, см стандарт.
Вектор обязан, чтобы все элементы хранились друг за другом.
В стеке храниться локальные переменные, насколько мне извесно( не верен сто процентно) А в куче храниться все созданное new. Я не принижаю преимущество NET. По мне как программисту, главное чтобы работало, чтобы написать можно было быстро, и рефакторить в будущем не мучительно. Я хоть на досовском басике напишу. если условиям удовлетворит. |
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
Элементы или ссылки на них?
С некоторым могу поспорить 1)
Будет хранится в стеке (ибо структура, выступающая локальной переменной). 2) внутри кода той же структуры Point координата X точки не является локальной переменной, но она будет храниться в стеке, как часть структурной переменной. |
||||
|
|||||
| Kirill89 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
Учту.
А можно немного подробнее про эту комманду?
Разве!? Помоему сама структура point будет хранить ссылки на переменные в кучи, тоесть именно на переменные X и Y |
||||||
|
|||||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 5 Всего: 149 |
А в чем тогда фишка структуры? В куче хранится только те части структуры, которые являются классами. А int (тип переменной X) это как раз структурный тип Это сообщение отредактировал(а) ivashkanet - 13.4.2007, 15:21 |
|||
|
||||
| Kirill89 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 501 Регистрация: 17.10.2006 Где: Питер Репутация: нет Всего: 4 |
ivashkanet, тогда получается, что все "простые" (классические) переменные хранятся в стеке? Что-то нистекется: классы хранятся в куче, но в классе могт быть переменные, которые отдельно от него хранятся в стеке? А структура это мини класс
Стоп. Как не адрес?! Там значение вида 00х000000 - тоесть переменная типа long. Как в int записалось случайное значение типа long? Это сообщение отредактировал(а) Kirill89 - 13.4.2007, 19:48 |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 18 Всего: 186 |
Мы говорим о ссылках в C# / VB .NET, а не о ссылках C++. Никто ничего не путает. Причём тут преимущества? Мы сейчас не о них спорим Гуглить пробовали Читаем тут.
А в моём понимании машина -- это мини-самолёт. Почему не летает? P.S. Кончаем обсуждать C++ уже. Добавлено через 43 секунды И ещё о памяти в .NET. |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |