Podstawowe informacje o ciągach w Visual Basic
Typ String
danych reprezentuje serię znaków (każdy z nich reprezentuje z kolei wystąpienie Char
typu danych). W tym temacie przedstawiono podstawowe pojęcia dotyczące ciągów w Visual Basic.
Zmienne ciągu
Wystąpienie ciągu może mieć przypisaną wartość literału reprezentującą serię znaków. Na przykład:
Dim MyString As String
MyString = "This is an example of the String data type"
Zmienna String
może również akceptować dowolne wyrażenie, które daje w wyniku ciąg. Odpowiednie przykłady przedstawiono poniżej:
Dim OneString As String
Dim TwoString As String
OneString = "one, two, three, four, five"
' Evaluates to "two".
TwoString = OneString.Substring(5, 3)
OneString = "1"
' Evaluates to "11".
TwoString = OneString & "1"
Każdy literał przypisany do zmiennej String
musi być ujęta w cudzysłów (""). Oznacza to, że cudzysłów w ciągu nie może być reprezentowany przez cudzysłów. Na przykład następujący kod powoduje błąd kompilatora:
Dim myString As String
' This line would cause an error.
' myString = "He said, "Look at this example!""
Ten kod powoduje błąd, ponieważ kompilator kończy ciąg po drugim cudzysłowie, a pozostała część ciągu jest interpretowana jako kod. Aby rozwiązać ten problem, język Visual Basic interpretuje dwa znaki cudzysłowu w literału ciągu jako jeden cudzysłów w ciągu. W poniższym przykładzie pokazano prawidłowy sposób uwzględnienia cudzysłowu w ciągu:
' The value of myString is: He said, "Look at this example!"
myString = "He said, ""Look at this example!"""
W poprzednim przykładzie dwa cudzysłowy poprzedzające wyraz Look
stają się jednym znakiem cudzysłowu w ciągu. Trzy znaki cudzysłowu na końcu wiersza reprezentują jeden cudzysłów w ciągu i znak zakończenia ciągu.
Literały ciągu mogą zawierać wiele wierszy:
Dim x = "hello
world"
Wynikowy ciąg zawiera sekwencje nowego wiersza, które były używane w literału ciągu (vbcr, vbcrlf itp.). Nie trzeba już używać starego obejścia:
Dim x = <xml><![CDATA[Hello
World]]></xml>.Value
Znaki w ciągach
Ciąg można traktować jako serię Char
wartości, a String
typ ma wbudowane funkcje, które umożliwiają wykonywanie wielu manipulacji na ciągu przypominającym manipulacje dozwolone przez tablice. Podobnie jak wszystkie tablice w programie .NET Framework, są to tablice oparte na zera. Można odwoływać się do określonego znaku w ciągu za pośrednictwem Chars
właściwości, która zapewnia dostęp do znaku według pozycji, w której pojawia się w ciągu. Na przykład:
Dim myString As String = "ABCDE"
Dim myChar As Char
' The value of myChar is "D".
myChar = myString.Chars(3)
W powyższym przykładzie Chars
właściwość ciągu zwraca czwarty znak w ciągu , czyli D
, i przypisuje go do myChar
elementu . Możesz również uzyskać długość określonego ciągu za pomocą Length
właściwości . Jeśli musisz wykonać wiele manipulacji typu tablicy na ciągu, możesz przekonwertować go na tablicę Char
wystąpień przy użyciu ToCharArray
funkcji ciągu. Na przykład:
Dim myString As String = "abcdefghijklmnop"
Dim myArray As Char() = myString.ToCharArray
Zmienna myArray
zawiera teraz tablicę Char
wartości, z których każdy reprezentuje znak z myString
.
Niezmienność ciągów
Ciąg jest niezmienny, co oznacza, że nie można zmienić jego wartości po jej utworzeniu. Nie uniemożliwia to jednak przypisania więcej niż jednej wartości do zmiennej ciągu. Rozważmy następujący przykład:
Dim myString As String = "This string is immutable"
myString = "Or is it?"
W tym miejscu jest tworzona zmienna ciągu, biorąc pod uwagę wartość, a następnie zmieniana jest jej wartość.
Mówiąc dokładniej, w pierwszym wierszu jest tworzone wystąpienie typu String
i otrzymuje wartość This string is immutable
. W drugim wierszu przykładu zostanie utworzone nowe wystąpienie i nadane wartości Or is it?
, a zmienna ciągu odrzuca odwołanie do pierwszego wystąpienia i przechowuje odwołanie do nowego wystąpienia.
W przeciwieństwie do innych typów danych wewnętrznych, String
jest typem referencyjnym. Gdy zmienna typu odwołania jest przekazywana jako argument do funkcji lub podroutine, odwołanie do adresu pamięci, w którym są przechowywane dane, jest przekazywane zamiast rzeczywistej wartości ciągu. W poprzednim przykładzie nazwa zmiennej pozostaje taka sama, ale wskazuje na nowe i inne wystąpienie String
klasy, która zawiera nową wartość.