unsafe bloğu
unsafe bloğu ve işaretçi kullanımını öğrenirsin.
unsafe bloğu nedir?
unsafe bloğu, C#'ta işaretçi (pointer) kullanımına izin veren özel bir kod parçasıdır. İşaretçiler doğrudan bellek adresini tutar; bu, normal C# sınırlarının dışına çıkar.
unsafe kullanmak için projede <AllowUnsafeBlocks>true</AllowUnsafeBlocks> ayarı gerekir. unsafe bloğu, GC'nin nesneleri taşıyamayacağı yerel kod parçaları yazmanı sağlar. Bu, performansın kritik olduğu senaryolarda tercih edilir.
unsafe ne zaman kullanılır?
unsafe kod genellikle performansın kritik olduğu yerlerde (oyun motorları, görüntü işleme, yerel kütüphane sarmalama) kullanılır. Günlük kodda nadiren gerekir; çünkü işaretçi hataları çökmeye ve güvenlik açıklarına yol açabilir.
Modern C#'ta Span<T> ve ref struct türleri unsafe'in birçok kullanımını güvenli biçimde değiştirir. Bu yüzden unsafe'e yalnızca gerçekten gerekli olduğunda başvurulur.
Uygulama unsafe metodla değer yaz
Bir unsafe static void Touch() metodu tanımla. Gövdede int x = 10; ve int* p = &x; yaz, sonra Console.WriteLine(*p); ile değeri yazdır. Main'de Touch(); çağır.
Örnek çözümü göster
unsafe static void Touch() { int x = 10; int* p = &x; Console.WriteLine(*p); }
Örnek çözüm:
using System;
class Program
{
unsafe static void Touch()
{
int x = 10;
int* p = &x;
Console.WriteLine(*p);
}
static void Main()
{
Touch();
}
}
Kendini test et
-
unsafe bloğu neyi sağlar?
- İşaretçi kullanımı
- Daha hızlı GC
- Daha kısa kod
- Otomatik bellek yönetimi
Cevabı göster
İşaretçi kullanımı — Doğru. unsafe bloğunda int* gibi işaretçiler kullanılabilir.
-
unsafe metodunu tamamla
public ____ void DoWork() { int x = 5; int* p = &x; }Cevabı göster
public unsafe void DoWork() { int x = 5; int* p = &x; } -
unsafe kullanmak için ne gerekir?
- Sadece async
- Yalnızca static
- Projede AllowUnsafeBlocks ayarı
- Hiçbir şey
Cevabı göster
Projede AllowUnsafeBlocks ayarı — Doğru. AllowUnsafeBlocks proje ayarı açılmalıdır.