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ıramamasına neden olan bir bildirime, örneğin bir üyeye veya açık veya genişletilmiş düzene sahip bir türdeki alana değiştirici olarak extern uygularsınızsafe. 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.
preview Söz dizimini etkinleştirmek için olarak ayarlayınLangVersion. Ayrıca açık safe veya seçimler dahil unsafe güncelleştirilmiş kuralları zorunlu kılmak ve güvenli olmayan çağıran yükümlülüklerini zorunlu kılmak için derleyici özelliğini etkinleştirin updated-memory-safety-rules . Etkinleştirme ayrıntıları için bkz . Güncelleştirilmiş bellek güvenliği kurallarını etkinleştirme. 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:
// Syntax requires LangVersion preview; enforcement requires the updated-memory-safety-rules compiler feature.
[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. Güncelleştirilmiş kurallar etkinleştirildiğinde, her iki değiştiricinin de atlanması bir hatadır.
Açık veya genişletilmiş düzen alanları
veya [ExtendedLayout]türünde [StructLayout(LayoutKind.Explicit)] derleyici, her örnek alanının güvenliğini kendi başına sınıflandıramaz. Bu tür her alanı safe veya unsafeişaretlersiniz:
// Syntax requires LangVersion preview; enforcement requires the updated-memory-safety-rules compiler feature.
[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. Aynı kural, açık düzen alanları ve genişletilmiş düzen alanları için de geçerlidir. Üyelerde extern olduğu gibi, güncelleştirilmiş kurallar etkinleştirildiğinde 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.