C# Tips – wskaźniki
Patrząc na tytuł posta osoby mniej zaznajomione z językiem C# mogą zarzucić mi, że wskaźniki to w C++ mamy, a nie w C#, który korzysta wszędzie z referencji. Ale prawda jest taka, że w przeciwieństwie do Javy, C# pozwala korzystać również ze wskaźników w odpowiednio oznaczonych blokach. Jednak ponieważ jest to mechanizm, którego używa się dopiero w specyficznych przypadkach i w większości sytuacji jest niezalecany, dlatego tutaj wspomnę tylko, że takie coś istnieje. Jeśli będziesz potrzebował użyć w praktyce wskaźników w C# to jest duże prawdopodobieństwo, że nie będziesz już początkującym programistą tego języka ;) Od siebie powiem, że jedyna sytuacja kiedy były mi one potrzebne była wtedy gdy potrzebowałem wykonać operację na każdym pikselu wczytanego do tablicy bajtów obrazka i wskaźniki pozwoliły wtedy w znacznym stopniu przyspieszyć ten fragment kodu.
Blok kodu, w którym używasz wskaźników musi być oznaczony jako unsafe, co już samo w sobie jest pewnym ostrzeżeniem o skutkach ich wykorzystania ;) Dodatkowo trzeba w opcjach projektu pozwolić na wykonaniu niebezpiecznego (unsafe) kodu. Wszystko po to, żebyś świadomie korzystał z tego mechanizmu.
Wskaźnik nie może odwoływać się np. do referecji, możesz go utworzyć dla typów prostych (int, double, byte) i dla własnych typów, które zawierają jedynie obiekty, dla których można użyć wskaźnika. Dodatkowo w przeciwieństwie do języka C++ w C# nie ma konieczności zwalniania za alokowanej pamięci, wyręcza nas w tym CLR.
Przykład tworzenia tablicy przy użyciu wskaźników:
unsafe { int* tab = stackalloc int[20]; }
Jak widać do alokacji pamięci wykorzystuje się słowo kluczowe stackalloc.
Jak mówiłem, poza bardzo szczególnymi przypadkami, wskaźniki nie są czymś co będziesz często używał dlatego tutaj tylko wspomniałem o tym, że taki mechanizm istnieje, po więcej informacji i przykładów odsyłam do źródła czyli do MSDN.
Leave a Comment