2016-10-11 12 views
0

Как начинающий программист Я пытаюсь понять понятия объявления переменных и назначения значений в Visual Basic. Я рассматриваю этот код из учебника урока:Объявление переменной и назначение

Imports System.Text 

Module Module1 

     Sub Main() 

      Dim myString As StringBuilder = New StringBuilder 

      For i = 1 To 10 
       myString.Append("-") 
       myString.Append(i) 
      Next 

      Console.WriteLine(myString) 
      Console.ReadLine() 

     End Sub 

End Module 

Моя путаница из-за линии:

Dim myString As StringBuilder = New StringBuilder 

То, что я думаю, что происходит, что я объявляю переменную MyString в качестве нового объекта экземпляра класс StringBuilder (надеюсь, что здесь я правильно использую слова «объект» и «класс»). Однако почему myString впоследствии необходимо назначить New StringBuilder? Разве я не сделал это StringBuilder с Dim? Какова роль оператора New в этом примере?

Любое объяснение, которое помогает мне понять, очень ценится.

+1

_Dim StringBuilder, как StringBuilder_ объявляет ссылку на экземпляр StringBuilder, который не существует, пока вы вызовите New. Новый создает экземпляр где-то в памяти и возвращает _reference_ в эту область памяти, где экземпляр существует. – Steve

+0

PS Я нашел это обсуждение перед публикацией, но, к сожалению, оно не касалось моего вопроса. http://stackoverflow.com/questions/467843/vb-net-dim-vs-new –

+0

Эта строка делает ** две вещи: 'Dim' заявляет, что код будет использовать переменную' myString', которая будет типа 'StringBuilder'. 'New' создает экземпляр' StringBuilder', который можно использовать. – Plutonix

ответ

1

Линия

Dim myString as StringBuilder 

объявляет переменную, которая предназначается для ссылки на экземпляр StringBuilder. Этот экземпляр не существует, пока вы не назовете New. Новый создает экземпляр где-то в памяти и возвращает ссылку на эту область памяти, где экземпляр существует.

Давайте попробуем изучить линию.
Когда вы пишете

Dim myString as StringBuilder = New StringBuilder 

(вы также можете использовать Dim MyString = новый StringBuilder(), компилятор может распознать тип переменной из контекста)

вы кладете в одной строке две команды

Dim myString As StringBuilder 
myString = New StringBuilder 

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

Dim myString As StringBuilder 
Dim b As Boolean = False 
b = myString Is Nothing 
Console.WriteLine(b) ' => outputs True 

Теперь вы называете New StringBuilder оператора, который ищет область памяти, где есть достаточно места, чтобы хранить все внутренние поля, являются частью экземпляра StringBuilder, после создания этой области оператор New вызывает конструктор без параметров в классе StringBuilder (который должен инициализировать внутренние поля для того, что требуется) и RETURNS значение, указывающее на область памяти, выделенную для экземпляр StringBuilder. Именно это значение (ссылка ...), который будет присвоен переменной MyString, что теперь нет больше ничего

myString = New StringBuilder() 
b = myString Is Nothing 
Console.WriteLine(b) ' => outputs False 
0

Вот что случилось, вы сделали ярлык:

Dim myString As StringBuilder 
myString = new StringBuilder() 

Так что не нужно быть назначить новый StringBuilder, потому что вы уже сделали назначение.

Теперь Console.WriteLine должен быть myString.ToString(), как

Console.WriteLine (myString.ToString()) 

это будет преобразовать объект StringBuilder в строку.

+0

Обратите внимание, что '()' предпочтительно при вызове конструкторов и функций (требуется в C#, go figure). Кроме того, функция 'ToString()' агрегирует строки в объекте StringBuilder в одну строку и возвращает ее - no * conversion * – djv

0

String builder - это класс.

Когда вы делаете Dim myString as StringBuilder, вы создаете переменную, то есть пространство памяти, которое укажет на местоположение в памяти экземпляра StringBuilder.

Когда бы вы ни были Dim, его значение будет значением по умолчанию для этого класса. Для большинства классов значение по умолчанию равно null, хотя значения ValueTypes, такие как Integer и Boolean, имеют другие значения по умолчанию (0 для Integer, false для Boolean)

Когда вы делаете = New StringBuilder, вы создаете экземпляр объекта класса StringBuilder и теперь ваша переменная myString указывает на это место в памяти.

Если вы опустите этот шаг, myString.Append("-") будет генерировать исключение NullPointerException, потому что myString имеет значение NULL.

Dim myString As StringBuilder = New StringBuilder легкий способ сделать:

Dim myString As StringBuilder 
myString = New StringBuilder 

 Смежные вопросы

  • Нет связанных вопросов^_^