Модераторы: diadiavova, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> В чем разница между VB.NET и С#.NET? 
:(
    Опции темы
Exception
Дата 10.4.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(Kirill89 @  10.4.2007,  14:47 Найти цитируемый пост)
А как же динамические массивы? В 6.0 они использовались для простоты, но занимали кучу памяти и ресурсов. Они ведь остались? Значит язык всё-равно не является серьёзным? 


Не понял. Массивы -- они и в C++ и в C# есть и именно в том виде, в котором они есть в VB .NET smile . А вот как раз в VB 6 их не было в нормальном виде. То бишь, вместо создания нормального массива, мы почему-то давали контролам одинаковые имена и меняли свойство Index.

Добавлено через 1 минуту
Цитата(ivashkanet @  10.4.2007,  15:21 Найти цитируемый пост)
Хочешь используй их, хочешь нет (я, например, ниразу не использовал. Да и массиву предпочитаю коллекцию (Array(of Type)))


Почему же, массивы элементов бывают весьма полезны.

Добавлено через 2 минуты и 41 секунду
И в VB .NET / C# массивы элементов управления не занимают кучу места и ресурсов smile . Массив из 3 элементов управления занимает ровно столько же места, сколько и три разрозненных элемента управления smile . В массиве же хранятся ссылки на эти элементы, а не сами элементы.
PM   Вверх
Kirill89
Дата 10.4.2007, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Exception, Нет, очевидно мы непоняли друг друга
Код

Dim a() as byte
Redim a(10) as byte

Это в С++ неиспользуется из-зи экономии ресурсов.
Там есть массив в куче - vector, но он не является полноценным динамическим массивом, в моём понимании этого термина.


--------------------
PM MAIL WWW   Вверх
HappyLife
Дата 10.4.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



Kirill89, 
Он являеться полноценным динамическим массивом. В полном смысле этого слова. Также ему на помощь имеются map, list.
 Ты расскажи, что вектор делать не умеет.

PM MAIL   Вверх
Exception
Дата 10.4.2007, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(Kirill89 @  10.4.2007,  15:49 Найти цитируемый пост)
Dim a() as byte
Redim a(10) as byte


Кстати, в VB .NET это тоже не используется. Ну то есть конечно их можно использовать, но остались они только для хоть какой-нибудь совместимости с VB 6. Никто не вынуждает тебя пользоваться этой ерундой, когда есть такие удобные классы как List (Of T) и прочая, прочая.

Добавлено через 1 минуту и 8 секунд
Кстати, если не ошибаюсь, List (Of T) - это аналог vector<T>.
PM   Вверх
ivashkanet
Дата 10.4.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149



Цитата(Exception @  10.4.2007,  13:35 Найти цитируемый пост)
Почему же, массивы элементов бывают весьма полезны.

А я не говорю, что они неполезны (боже упаси меня от такой ереси) smile 
Я говорил про динамические массивы 
Цитата(Kirill89 @  10.4.2007,  13:49 Найти цитируемый пост)
Redim a(10) as byte

Которые, кстати, декомпилируются в "создание большего массива" + "копирование всех элементов из старого массива в новый"
PM MAIL WWW ICQ   Вверх
Exception
Дата 10.4.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Угу, жуткая ересь. Очень полезно бывает почитать отрефлекторенный код.
PM   Вверх
Kirill89
Дата 10.4.2007, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Цитата(ivashkanet @  10.4.2007,  15:28 Найти цитируемый пост)
Которые, кстати, декомпилируются в "создание большего массива" + "копирование всех элементов из старого массива в новый" 

Серьёзно?! Я всегда считал, что просто сдвигается адрес первой и последней ячейки памяти  smile 
Тогда ясно почему он кушает ресурсы...
Цитата(Exception @  10.4.2007,  15:18 Найти цитируемый пост)
Кстати, если не ошибаюсь, List (Of T) - это аналог vector<T>. 

Несовсем... Вектор хранит только адреса памяти и позволяет делать обход по ним только без указания индекса. Тоесть по этому массиву можно пробежаться только от конца к началу или наоборот. А лист, если я не ошибаюсь, хранит конкретные значения и позволяте обратиться к ним по индексу.


--------------------
PM MAIL WWW   Вверх
Exception
Дата 10.4.2007, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(Kirill89 @  10.4.2007,  21:51 Найти цитируемый пост)
А лист, если я не ошибаюсь, хранит конкретные значения и позволяте обратиться к ним по индексу. 


Конкретные значения для ссылочных типов бывают только в куче и нигде больше smile !
Во всех переменных всегда хранятся ссылки! И в списке тоже хранятся ссылки, если конечно, это не List (Of Integer) -- тут ты, безусловно, прав.
Нет, по индексу к элементы списка не обратишься, хотя средствами LINQ это и реализуется.
Туплю, можно.

Это сообщение отредактировал(а) Exception - 10.4.2007, 22:37
PM   Вверх
Kirill89
Дата 11.4.2007, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Exception, ну я небыл уверен, потому, что в большенстве своем пользовался векторм, он позволяет легко лепить такие чудесные вещи как отмена любого колличества действий (как в MS Office) smile
А лист имеет табличную систему, из чего и следет индекс...
Цитата(Exception @  10.4.2007,  22:36 Найти цитируемый пост)
Конкретные значения для ссылочных типов бывают только в куче 

Несовсем понял: это как конкретные значения для ссылочных типов? ссылка это тоже тип, хотя и пишется 
Код

int *p=new int;
*p=12;

насамом деле если сделать
Код

m=p+1;

То значение переменной *м будет равно следующей ячейки памяти, а не 13.
А переменная p приэтом несёт сам адрес переменной типа int.
Я могу ошибаться, но помоему, когда я учил было именно так smile
P.S.: извините за жуткий офф топик, но я незнаю как этот код бдет выглядеть в vb.net, если он вообще там возможен.

Это сообщение отредактировал(а) Kirill89 - 11.4.2007, 21:50


--------------------
PM MAIL WWW   Вверх
Kirill89
Дата 11.4.2007, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 501
Регистрация: 17.10.2006
Где: Питер

Репутация: нет
Всего: 4



Код

#include <iostream.h>

void main(){
    int *a=new int;
    int m;
    *a=1;
    m=*a+1;
    a=a+1;
    cout<<m<<"\n"; // здесь результат работы с переменной по адресу
    cout<<*a<<"\n"; // а вот и сам адрес
    cout<<a<<"\n"; // тот самый адрес памяти после которого записана переменная типа int
}

Вот тут всё видно smile
А как же ещё? никакие переменные кроме внтренних переменных проекта немогут быть записаны нигде кроме кучи.


--------------------
PM MAIL WWW   Вверх
Exception
Дата 12.4.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Цитата(Kirill89 @  11.4.2007,  22:45 Найти цитируемый пост)
н позволяет легко лепить такие чудесные вещи как отмена любого колличества действий (как в MS Office)


Паттерн "Команда"

Теперь по поводу памяти.
Указателей в .NET (про всякие извраты молчу) нету. Но, с другой стороны, создав, например, массив ссылочных типов и записав объект myObject в элемент массива с индексом ноль, ты туда записываешь не сам объект, а ссылку на него, Другими словами, все переменные ссылочных типов являются указателями, которые "притворяются" обычными переменными.

Твоя цитата smile ?

Цитата(Kirill89 @  10.4.2007,  21:51 Найти цитируемый пост)
Вектор хранит только адреса памяти и позволяет делать обход по ним только без указания индекса. Тоесть по этому массиву можно пробежаться только от конца к началу или наоборот. А лист, если я не ошибаюсь, хранит конкретные значения и позволят обратиться к ним по индексу. 


Массив, список и т.п. всегда хранят именно ссылки на объекты, понимаешь, о чём я smile ?
PM   Вверх
HappyLife
Дата 13.4.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



P.S Прошу прощения что к вам залез. Уж очень стало обидно за С++=)
Заранее извиняюсь. И если позволите, поправляю некоторые нюансы. Дабы не было ошибочных мнений.

Цитата

Несовсем... Вектор хранит только адреса памяти и позволяет делать обход по ним только без указания индекса. Тоесть по этому массиву можно пробежаться только от конца к началу или наоборот. А лист, если я не ошибаюсь, хранит конкретные значения и позволяте обратиться к ним по индексу.

Вектор не хранит только адреса, вектор хранит всё! Причем все элементы идут строго по порядку. Строго друг за другом. Но если у тебя есть желание хранить адреса, храни. Дело полностью твое.
По этому элементу можно пробежаться хоть с середины, да откуда угодно.
А лист хранит все тоже самое что и вектор, разница лишь в том что нету индексов. И не факт, что хранит он строго все попорядку.

Цитата

Конкретные значения для ссылочных типов бывают только в куче и нигде больше smile !

Я был другого мнения. Абсалютно везде.

Цитата

Несовсем понял: это как конкретные значения для ссылочных типов? ссылка это тоже тип, хотя и пишется 
Код
    
int *p=new int;
*p=12;


Не путать ссылки, и указатели.
Ссылка
Код

int a = 10;
int & b = a;


Цитата

То значение переменной *м будет равно следующей ячейки памяти, а не 13.
А переменная p приэтом несёт сам адрес переменной типа int.
Я могу ошибаться, но помоему, когда я учил было именно так smile
P.S.: извините за жуткий офф топик, но я незнаю как этот код бдет выглядеть в vb.net, если он вообще там возможен.

Абсаюлютно верно. В этом как раз таки и гибкость С++

Добавлено @ 11:41
Цитата(Kirill89 @ 11.4.2007,  22:02)
Код

#include <iostream.h>

void main(){
    int *a=new int;
    int m;
    *a=1;
    m=*a+1;
    a=a+1;
    cout<<m<<"\n"; // здесь результат работы с переменной по адресу
    cout<<*a<<"\n"; // а вот и сам адрес
    cout<<a<<"\n"; // тот самый адрес памяти после которого записана переменная типа int
}

Вот тут всё видно smile
А как же ещё? никакие переменные кроме внтренних переменных проекта немогут быть записаны нигде кроме кучи.

Да нет. Кроме кучи переменные еще в стеке ошиваются.

Код

    cout<<*a<<"\n"; // а вот и сам адрес

Нее... это не адрес, это случайное значение...
Адрес перется так
Код

cout << reiterpret_cast<int>(a);



Это сообщение отредактировал(а) HappyLife - 13.4.2007, 11:43
PM MAIL   Вверх
ivashkanet
Дата 13.4.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149



Цитата(HappyLife @  13.4.2007,  10:39 Найти цитируемый пост)
Вектор не хранит только адреса, вектор хранит всё! 

Откуда такие данные? Вы можете это подтвердить документально?
Цитата(HappyLife @  13.4.2007,  10:39 Найти цитируемый пост)
Я был другого мнения. Абсолютно везде.

Есть два вида памяти: Стек и Куча. В первом хранятся Value-типы, во втором --- Ссылочные и запакованные Value-типы.
Цитата(HappyLife @  13.4.2007,  10:39 Найти цитируемый пост)
В этом как раз таки и гибкость С++

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

PM MAIL WWW ICQ   Вверх
HappyLife
Дата 13.4.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 17.5.2006

Репутация: нет
Всего: 8



ivashkanet, см стандарт.
Вектор обязан, чтобы все элементы хранились друг за другом.
Код

Есть два вида памяти: Стек и Куча. В первом хранятся Value-типы, во втором --- Ссылочные и запакованные Value-типы.

В стеке храниться локальные переменные, насколько мне извесно( не верен сто процентно)
А в куче храниться все созданное new.


Я не принижаю преимущество NET.
По мне как программисту, главное чтобы работало, чтобы написать можно было быстро, и рефакторить в будущем не мучительно.
Я хоть на досовском басике напишу. если условиям удовлетворит.
PM MAIL   Вверх
ivashkanet
Дата 13.4.2007, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 5
Всего: 149



Цитата(HappyLife @  13.4.2007,  12:35 Найти цитируемый пост)
Вектор обязан, чтобы все элементы хранились друг за другом.

Элементы или ссылки на них?
Цитата(HappyLife @  13.4.2007,  12:35 Найти цитируемый пост)
В стеке храниться локальные переменные, насколько мне извесно( не верен сто процентно)
А в куче храниться все созданное new.

С некоторым могу поспорить smile
1) 
Код
point = new Point(0,0)

Будет хранится в стеке (ибо структура, выступающая локальной переменной).
2) внутри кода той же структуры Point координата X точки не является локальной переменной, но она будет храниться в стеке, как часть структурной переменной.
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1210 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.