Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
safe Bağlamsal anahtar sözcük, güncelleştirilmiş bellek güvenliği modelinin güvenlik seçimini açık hale getirmenizi gerektirdiği yerlerde bir bildirimin sağlam olduğunu doğrular. Derleyicinin kendi başına sınıflandıramayabileceği bir bildirime, örneğin bir üyeye veya açık düzene sahip bir yapıdaki bir alana değiştirici olarak extern uygularsınızsafe. Değiştiricisafe, çağıranların bağlama ihtiyaç duymadığını unsafe belirtirkenunsafe, arayana güvenlik denetimi yükümlülüğünü de yayarak bunun karşılığıdırunsafesafe.
Important
safe anahtar sözcüğü, C# 15 ve .NET 11'deki bir önizleme özelliği olan güncelleştirilmiş bellek güvenliği modelinin bir parçasıdır. .NET 11 Preview 5'teki derleyici henüz anahtar sözcüğü tanımıyor. Özelliği izlemek için derleyici seçeneğini olarak previewayarlayınLangVersion. Tam tasarım için bkz. bellek güvenliği özelliği belirtimi. Bu makaledeki kod önerilen söz dizimini gösterir ve geçerli önizleme derleyicisiyle derlenemez.
Extern üyeleri
Bir extern üye yerel kodu çağırır, böylece derleyici güvenliğini sınıflandıramaz. Güncelleştirilmiş modelin altında, kısmi bir LibraryImport yöntem safeunsafede dahil olmak üzere veya olmak üzere her extern bildirimi işaretlersiniz:
// Preview: illustrates the updated model, which the current compiler doesn't enforce yet.
[LibraryImport("libc")]
internal static safe partial int getpid();
[LibraryImport("libc", StringMarshalling = StringMarshalling.Utf8)]
internal static unsafe partial nint strlen(byte* str);
getpid parametre almaz ve bir ilkel değer döndürür, bu nedenle yazar çağrının güvenli olduğunu ve çağıranların bağlam olmadan unsafe kullandığını doğrular.
strlen yerel kodun başvurusunu kaldıran ham bir işaretçi alır, bu nedenle bildirimin olduğu unsafe ve çağıranlara yükümlülüğü yaydığını gösterir. Her iki değiştiricinin de atlanması bir hatadır ve bu da sizi güvenlik kararına zorlar.
Açık düzen alanları
ile [StructLayout(LayoutKind.Explicit)]bir yapıda alanlar bellekte çakışabilir, bu nedenle derleyici bir alanda okumanın ses olup olmadığı konusunda neden olamaz. Böyle bir yapının safe her alanını veya unsafeolarak işaretlersiniz:
// Preview
[StructLayout(LayoutKind.Explicit)]
internal struct Union
{
[FieldOffset(0)]
internal safe int AsInt;
[FieldOffset(0)]
internal safe float AsFloat;
}
Yerel işaretçiyi tutan veya türü, tür sisteminin ifade emeyebileceği sabit bir değer taşıyan bir alandır unsafe. Türü tür sistemi tarafından tam olarak açıklanan bir alan şeklindedir safe. Üyelerde extern olduğu gibi, her iki değiştiricinin de atlanması bir hatadır.
C# dil belirtimi
Daha fazla bilgi için bkz. C# Dil Belirtimi'ndekiGüvenli olmayan kod. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.
Güncelleştirilmiş bellek güvenliği modelinin tasarımı için bkz. bellek güvenliği özelliği belirtimi.