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 safe uygularsınızextern. Değiştiricisafe, çağıranların bağlama ihtiyaç duymadığını unsafe belirtirkensafe, arayana güvenlik denetimi yükümlülüğünü de yayarak bunun karşılığıdırunsafeunsafe.
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. Derleyici, üyeler ve açık düzen alanlarında değiştirici extern olarak kabul edersafe. Ancak, güncelleştirilmiş çağıran güvenliği kuralları için henüz genel bir kabul yoktur, bu nedenle derleyici güvenlik seçimini safe zorlamaz ve unsafe ifade eder: her iki değiştiricinin atlanması bir hata oluşturmaz ve çağıranların yapabileceklerini değiştirmez. Özelliği izlemek için derleyici seçeneğini olarak LangVersionayarlayınpreview. Tam tasarım için bkz. bellek güvenliği özelliği belirtimi.
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 extern yöntem LibraryImportsafede dahil olmak üzere veya olmak üzere her unsafe bildirimi işaretlersiniz:
// Compiles under LangVersion preview, but the safety choice isn't enforced 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ı, güncelleştirilmiş model kapsamında bir hata olarak tasarlanmıştır, ancak güncelleştirilmiş kurallar için genel kabul olmadığından derleyici henüz bu kuralı zorlamaz.
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:
// Compiles under LangVersion preview, but the safety choice isn't enforced yet.
[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ı güncelleştirilmiş model kapsamında bir hata olması amaçlanmıştır, ancak derleyici henüz bu kuralı zorlamaz.
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.