Загрузка...

С#, зачем нужно new?

Тема в разделе C# создана пользователем Anzen211 14 апр 2022. 249 просмотров

  1. Anzen211
    Anzen211 Автор темы 14 апр 2022 12 8 май 2021
    Я начал изучение языка C# и кое чего понять не могу, зачем нужно писать, например, при объявлении коллекции var list = new lisc<что-то>, нужно писать new?
    Где-то видел, что это нужно для того, чтобы дать память для этой коллекции, но и в других случаях слышал, что new отвечает за то, чтоб давать память, заранее спасибо за помощь
     
  2. feiserak
    feiserak 14 апр 2022 94 31 май 2013
    new это объявление нового экземпляра, без этого у тебя просто не скомпилируется же
    --- Сообщение объединено с предыдущим 14 апр 2022
    типо var list создал тебе переменную, а уже new List<> дает понять что эта переменная будет типа список
     
    1. Посмотреть предыдущие комментарии (1)
    2. vtlstolyarov
      feiserak, Певрое верно, но в твоём втором высказывании не совсем так:
      var list
      это АБСОЛЮТНО тоже самое что и
      List<> list
      , это просто синтаксичейский сахар для того чтобы укоротить запись а также не иметь проблем с анонимными типами. Но компилятор всегда точно знает что за тип скрывается за "var" и если он вдруг не может этого определить он жалуется (например
      var list = null;
      ). А
      new List<>
      выделит пямять под объект и вернёт ссылку на него.

      Хотя если честно я не совсем понимаю откуда у ТС возник этот вопрос, возможно он пришёл в C# например с питона где синтаксис вызова конструктора эквивалентен вызову функции и там не используется "new", но по факту и там и там отрабатывает конструктор класса/структуры который выделяет память под объект.
    3. Anzen211 Автор темы
      vtlstolyarov, У меня этот вопрос появился из-за того, что я никогда не изучал программирование и решил начать с C#, и там для создания переменной пишут по типу "Int i;" или присваивают значение "Int i = 10;", а тут я увидел, что применяют new, вот и подумал, почему нельзя написать "list<> list;", а потом добавлять в эту коллекцию новые элементы через add.
    4. kolyak
      Anzen211, Если почитать определение Динамические структуры данных, то думаю должно стать понятно :

      Динамические структуры данных – это структуры данных, память под которые выделяется и освобождается по мере необходимости. Динамические структуры данных в процессе существования в памяти могут изменять не только число составляющих их элементов, но и характер связей между элементами

      То есть такие типы данных как int, double, float, long, bool - это данные с фиксированным объемом памяти (то есть их один раз как задал, то места они больше не будут занимать -> отсюда и следует строгая типизация, в отличае от Python) (кстати их тоже можно создавать через оператор new: int i = new(i)). А такие типы данных как List, Dictionary и другие динамические структуры данных - у них объем занимаемой памяти может отличаться (поэтому и возвращается ссылка на объект, а не полностью объект) (кстати обычные массивы [] - это тоже данные с фиксированным объемом памяти, то есть как один раз в коде задал массив - таким он и будет, если ты конечно сам его не будешь пересоздавать)
Загрузка...
Top