Visual Basic .NET Language
Объявление переменных
Поиск…
Синтаксис
- Счетчик public As Integer
- Частный _counter As Integer
- Dim counter As Integer
Объявление и назначение переменной с использованием примитивного типа
Переменные в Visual Basic объявляются с использованием ключевого слова Dim
. Например, это объявляет новую переменную с именем counter
с типом данных Integer
:
Dim counter As Integer
Объявление переменной может также включать модификатор доступа , такой как Public
, Protected
, Friend
или Private
. Это работает в сочетании с областью переменной для определения ее доступности.
Модификатор доступа | Имея в виду |
---|---|
общественного | Все типы, которые могут получить доступ к закрытому типу |
защищенный | Только охватывающий класс и те, которые наследуют его |
Друг | Все типы в той же сборке, которые могут получить доступ к закрывающему типу |
Защищенный друг | Класс включения и его наследники или типы в той же сборке, которые могут получить доступ к закрывающему классу |
Частный | Только закрытый тип |
статический | Только по локальным переменным и только инициализирует один раз. |
В качестве сокращения ключевое слово Dim
может быть заменено модификатором доступа в объявлении переменной:
Public TotalItems As Integer
Private counter As Integer
Поддерживаемые типы данных приведены в таблице ниже:
Тип | кличка | Выделение памяти | пример |
---|---|---|---|
SByte | N / A | 1 байт | Dim example As SByte = 10 |
Int16 | короткий | 2 байта | Dim example As Short = 10 |
Int32 | целое число | 4 байта | Dim example As Integer = 10 |
Int64 | Долго | 8 байт | Dim example As Long = 10 |
не замужем | N / A | 4 байта | Dim example As Single = 10.95 |
двойной | N / A | 8 байт | Dim example As Double = 10.95 |
Десятичный | N / A | 16 байт | Dim example As Decimal = 10.95 |
логический | N / A | Диктуется внедрением платформы | Dim example As Boolean = True |
голец | N / A | 2 байта | Dim example As Char = "A"C |
строка | N / A | источник | Dim example As String = "Stack Overflow" |
DateTime | Дата | 8 байт | Dim example As Date = Date.Now |
Байт | N / A | 1 байт | Dim example As Byte = 10 |
UInt16 | UShort | 2 байта | Dim example As UShort = 10 |
UInt32 | UInteger | 4 байта | Dim example As UInteger = 10 |
UInt64 | ULong | 8 байт | Dim example As ULong = 10 |
объект | N / A | 4 байта 32-битная архитектура, 8 байт 64-битная архитектура | Dim example As Object = Nothing |
Также существуют идентификаторы данных и символы литерала, используемые для замены текстового типа и для принудительного типа литерала:
Тип (или псевдоним) | Идентификатор типа | Литеральный тип |
---|---|---|
короткий | N / A | example = 10S |
целое число | Dim example% | example = 10% или example = 10I |
Долго | Dim example& | example = 10& или example = 10L |
не замужем | Dim example! | example = 10! или example = 10F |
двойной | Dim example# | example = 10# или example = 10R |
Десятичный | Dim example@ | example = 10@ или example = 10D |
голец | N / A | example = "A"C |
строка | Dim example$ | N / A |
UShort | N / A | example = 10US |
UInteger | N / A | example = 10UI |
ULong | N / A | example = 10UL |
Интегральные суффиксы также можно использовать с шестнадцатеричными (& H) или восьмеричными (& O) префиксами:
example = &H8000S
или example = &O77&
Объекты Date (Time) также могут быть определены с использованием литерального синтаксиса:
Dim example As Date = #7/26/2016 12:8 PM#
Как только переменная объявлена, она будет существовать в пределах Области содержащего типа, Sub
или Function
объявленной в качестве примера:
Public Function IncrementCounter() As Integer
Dim counter As Integer = 0
counter += 1
Return counter
End Function
Переменная счетчика будет существовать только до End Function
а затем будет недоступна. Если эта переменная счетчика необходима вне функции, вам нужно будет определить ее на уровне класса / структуры или модуля.
Public Class ExampleClass
Private _counter As Integer
Public Function IncrementCounter() As Integer
_counter += 1
Return _counter
End Function
End Class
Кроме того, вы можете использовать модификатор Static
(не путать с Shared
), чтобы локальная переменная сохраняла его значение между вызовами его метода размещения:
Function IncrementCounter() As Integer
Static counter As Integer = 0
counter += 1
Return counter
End Function
Уровни декларации - переменные локальные и переменные
Локальные переменные - те, которые объявлены в процедуре (подпрограмме или функции) класса (или другой структуры). В этом примере exampleLocalVariable
является локальной переменной, объявленной в ExampleFunction()
:
Public Class ExampleClass1
Public Function ExampleFunction() As Integer
Dim exampleLocalVariable As Integer = 3
Return exampleLocalVariable
End Function
End Class
Ключевое слово Static
позволяет сохранить локальную переменную и сохранить ее значение после завершения (где обычно локальные переменные перестают существовать, когда завершающая процедура завершается).
В этом примере консоль равна 024
. При каждом вызове ExampleSub()
из Main()
статическая переменная сохраняет значение, ExampleSub()
в конце предыдущего вызова:
Module Module1
Sub Main()
ExampleSub()
ExampleSub()
ExampleSub()
End Sub
Public Sub ExampleSub()
Static exampleStaticLocalVariable As Integer = 0
Console.Write(exampleStaticLocalVariable.ToString)
exampleStaticLocalVariable += 2
End Sub
End Module
Переменные участника - объявляются вне любой процедуры на уровне класса (или другой структуры). Они могут быть переменными экземпляра , в которых каждый экземпляр содержащего класса имеет свою собственную отдельную копию этой переменной или Shared
variables , которые существуют как одна переменная, связанная с самим классом, независимо от любого экземпляра.
Здесь ExampleClass2
содержит две переменные-члены. Каждый экземпляр класса ExampleClass2
имеет отдельный ExampleInstanceVariable
которому можно получить доступ через ссылку на класс. Однако доступ к общей переменной ExampleSharedVariable
осуществляется с помощью имени класса:
Module Module1
Sub Main()
Dim instance1 As ExampleClass4 = New ExampleClass4
instance1.ExampleInstanceVariable = "Foo"
Dim instance2 As ExampleClass4 = New ExampleClass4
instance2.ExampleInstanceVariable = "Bar"
Console.WriteLine(instance1.ExampleInstanceVariable)
Console.WriteLine(instance2.ExampleInstanceVariable)
Console.WriteLine(ExampleClass4.ExampleSharedVariable)
End Sub
Public Class ExampleClass4
Public ExampleInstanceVariable As String
Public Shared ExampleSharedVariable As String = "FizzBuzz"
End Class
End Module
Пример модификаторов доступа
В следующем примере рассмотрим, что у вас есть решение, в котором есть два проекта: ConsoleApplication1 и SampleClassLibrary . Первый проект будет иметь классы SampleClass1 и SampleClass2 . Второй будет иметь SampleClass3 и SampleClass4 . Другими словами, у нас есть две сборки с двумя классами каждый. ConsoleApplication1 имеет ссылку на SampleClassLibrary .
Смотрите, как SampleClass1.MethodA взаимодействует с другими классами и методами.
SampleClass1.vb:
Imports SampleClassLibrary Public Class SampleClass1 Public Sub MethodA() 'MethodA can call any of the following methods because 'they all are in the same scope. MethodB() MethodC() MethodD() MethodE() 'Sample2 is defined as friend. It is accessible within 'the type itself and all namespaces and code within the same assembly. Dim class2 As New SampleClass2() class2.MethodA() 'class2.MethodB() 'SampleClass2.MethodB is not accessible because 'this method is private. SampleClass2.MethodB 'can only be called from SampleClass2.MethodA, 'SampleClass2.MethodC, SampleClass2.MethodD 'and SampleClass2.MethodE class2.MethodC() 'class2.MethodD() 'SampleClass2.MethodD is not accessible because 'this method is protected. SampleClass2.MethodD 'can only be called from any class that inherits 'SampleClass2, SampleClass2.MethodA, SampleClass2.MethodC, 'SampleClass2.MethodD and SampleClass2.MethodE class2.MethodE() Dim class3 As New SampleClass3() 'SampleClass3 resides in other 'assembly and is defined as public. 'It is accessible anywhere. class3.MethodA() 'class3.MethodB() 'SampleClass3.MethodB is not accessible because 'this method is private. SampleClass3.MethodB can 'only be called from SampleClass3.MethodA, 'SampleClass3.MethodC, SampleClass3.MethodD 'and SampleClass3.MethodE 'class3.MethodC() 'SampleClass3.MethodC is not accessible because 'this method is friend and resides in another assembly. 'SampleClass3.MethodC can only be called anywhere from the 'same assembly, SampleClass3.MethodA, SampleClass3.MethodB, 'SampleClass3.MethodD and SampleClass3.MethodE 'class4.MethodD() 'SampleClass3.MethodE is not accessible because 'this method is protected friend. SampleClass3.MethodD 'can only be called from any class that resides inside 'the same assembly and inherits SampleClass3, 'SampleClass3.MethodA, SampleClass3.MethodB, 'SampleClass3.MethodC and SampleClass3.MethodD 'Dim class4 As New SampleClass4() 'SampleClass4 is not accessible because 'it is defined as friend and resides in 'other assembly. End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass2.vb:
Friend Class SampleClass2 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass3.vb:
Public Class SampleClass3 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class
SampleClass4.vb:
Friend Class SampleClass4 Public Sub MethodA() 'Doing MethodA stuff... End Sub Private Sub MethodB() 'Doing MethodB stuff... End Sub Friend Sub MethodC() 'Doing MethodC stuff... End Sub Protected Sub MethodD() 'Doing MethodD stuff... End Sub Protected Friend Sub MethodE() 'Doing MethodE stuff... End Sub End Class