Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CA1417: Jangan gunakan
| Properti | Nilai |
|---|---|
| ID Aturan | CA1417 |
| Judul | Jangan gunakan OutAttribute pada parameter string untuk P/Invokes |
| Golongan | Interoperabilitas |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | Sebagai peringatan |
Penyebab
Parameter string P/Invoke diteruskan oleh nilai dan ditandai dengan OutAttribute.
Deskripsi aturan
Runtime .NET secara otomatis melakukan interning string. Jika string magang yang ditandai dengan OutAttribute diteruskan oleh nilai ke P/Invoke, runtime dapat didestabilisasi.
Cara memperbaiki pelanggaran
Jika marshalling data string yang dimodifikasi kembali ke pemanggil diperlukan, berikan string berdasarkan referensi sebagai gantinya. Jika tidak, OutAttribute dapat dihapus tanpa perubahan lain.
// Violation
[DllImport("MyLibrary")]
private static extern void Foo([Out] string s);
// Fixed: passed by reference
[DllImport("MyLibrary")]
private static extern void Foo(out string s);
// Fixed: marshalling data back to caller is not required
[DllImport("MyLibrary")]
private static extern void Foo(string s);
Kapan harus menekan peringatan
Tidak aman untuk menekan peringatan dari aturan ini.