Kod C # niebezpieczne
Kiedy blok kodu przy użyciuniebezpiecznego tag modyfikujący, C # pozwala na użycie zmiennej wskaźnik w tej funkcji.niebezpieczny kod lub kod niekontrolowana jest użycie zmiennej Kod blokuwskaźnika.
zmienna Pointer
Wskaźnik jest zmienną wartość adres innej zmiennej, czyli bezpośredni adres miejsca w pamięci.Podobnie jak inne zmienne lub stałe, należy użyć wskaźnika przed innej zmiennej przechowywania deklaracji wskaźnika adresu.
Ogólna postać deklaracji zmiennej wskaźnik jest:
Typ * var-name;
Poniżej znajduje się nieważny wskaźnik:
int * ip; / * punktów do liczby całkowitej * / double * dp / * wskaźnik do liczby podwójnej precyzji * / unosić * fp; / * wskaźnik do pływaka * / char * ch / * wskaźnik do char * /
Poniższy przykład ilustruje zastosowanie C # wykorzystanianiebezpiecznych modyfikatora, gdy wskaźnik:
using System; nazw UnsafeCodeApplication { Program klasy { statyczne niebezpieczne void main (String [] args) { int zmienna = 20; int * p = & var; Console.WriteLine ( "Dane są: {0}", zmienna); Console.WriteLine ( "Adres to: {0}", (int) p); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Dane są: 20 Adres: 99215364
Nie można zadeklarować całą metodę jako niebezpieczny kod, tylko w części należy zadeklarować metodę jako niebezpieczny kod. Poniższy przykład ilustruje ten punkt.
Pobieranie wartości danych za pomocą wskaźnika
Można użyć metodytoString () danych położenia odniesienia przechowywane w wyszukiwawczych zmiennych wskaźnikowych.Poniższy przykład ilustruje ten punkt:
using System; nazw UnsafeCodeApplication { Program klasy { public static void main () { niebezpieczny { int zmienna = 20; int * p = & var; Console.WriteLine ( "Dane są: {0}", zmienna); Console.WriteLine ( "Dane są: {0}", p> toString ()); Console.WriteLine ( "Adres to: {0}", (int) p); } Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Dane są: 20 Dane są: 20 Adres: 77128984
Przechodząc wskaźnik jako parametr metody
Możesz przekazać zmienną wskaźnik jako parametr do metody podejścia. Poniższy przykład ilustruje ten punkt:
using System; nazw UnsafeCodeApplication { Klasa TestPointer { publicznego niebezpieczne void zamiana (int * p, int q *) { Int temp = * p; * P * = q; * P = temp; } publicznego niebezpieczne static void Main () { TestPointer p = new TestPointer (); int var1 = 10; int var2 = 20; int * x = & zm1; int * y = & var2; Console.WriteLine ( "Przed swap: var1: {0}, var2: {1}", zm1, var2); p.swap (x, y); Console.WriteLine ( "Po swap: var1: {0}, var2: {1}", zm1, var2); Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Przed wymiany: var1: 10, var2: 20 Po wymiany: var1: 20, var2: 10
Użyj wskazówek, aby uzyskać dostęp do elementów tablicy
W języku C #, nazwa tablicy i wskaźnik do danych tablicowych z tym samym typem danych jest wskaźnikiem do różnych typów zmiennych. Na przykład, int * p i int [] p jest innego typu. Można zwiększyć zmienny wskaźnik p, bo to nie jest ustalona w pamięci, ale adres tablicy jest ustalana w pamięci, więc nie można dodać do tablicy s.
Tak więc, jeśli trzeba użyć zmiennych wskaźnika do uzyskania dostępu do danych tablicowych, jak zwykle robimy w C lub C ++, jak słowo aby użyćstałego ustalonego wskaźnika.
Poniższy przykład ilustruje ten punkt:
using System; nazw UnsafeCodeApplication { Klasa TestPointer { publicznego niebezpieczne static void Main () { int [] = {lista 10, 100, 200}; stałe (int * ptr = lista) / * Wyświetla wskaźnik adresu tablicy * / for (int i = 0; i <3; i ++) { Console.WriteLine ( "Adres listy [{0}] = {1}", I, (int) (ptr + i)); Console.WriteLine ( "Wartość listy [{0}] = {1}", I, * (ptr + i)); } Console.ReadKey (); } } }
Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:
Adres listy [0] = 31627168 Wartość listy [0] = 10 Adres listy [1] = 31627172 Wartość listy [1] = 100 Adres listy [2] = 31627176 Wartość listy [2] = 200
Kompilacji kodu niebezpieczny
W celu zestawienia niebezpieczny kod, należy przejść do wiersza poleceń kompilatora określić linię/ niebezpieczne polecenia.
Na przykład, aby skompilować program o nazwie prog1.cs zawierać niebezpieczny kod, wprowadź polecenie w wierszu poleceń:
CSC / niebezpieczne prog1.cs
Jeśli używasz Visual Studio IDE, musisz włączyć niebezpieczny kod we właściwościach projektu.
Procedura jest następująca:
- Przez Explorer (Solution Explorer) atrybutów (właściwości) węzła podwójne kliknięcie otwórzwłaściwości projektu (Project Properties).
- Kliknij kartębudować.
- Wybierz opcję"Zezwalaj niebezpieczny kod".